remove unsupported VS2008 solution
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Generate sets of words Tesseract is likely to find ambiguous"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "ambiguous_words"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "ambiguous_words.exe"
|
||||
VALUE "ProductName", "Tesseract-OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,217 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="ambiguous_words"
|
||||
ProjectGUID="{D9E202C0-DF5A-4AFA-BDC1-3E504EABB348}"
|
||||
RootNamespace="ambiguous_words"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\ambiguous_words.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\ambiguous_words.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Tests a Tesseract character classifier on data formatted for training"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "classifier_tester"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "classifier_tester.exe"
|
||||
VALUE "ProductName", "Tesseract OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,217 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="classifier_tester"
|
||||
ProjectGUID="{E6FBC5FF-8D2F-4E9F-B0D2-3DDDCFB595E5}"
|
||||
RootNamespace="classifier_tester"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\classifier_tester.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\classifier_tester.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Character normalization training for Tesseract"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "cntraining"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "cntraining.exe"
|
||||
VALUE "ProductName", "Tesseract OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,217 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="cntraining"
|
||||
ProjectGUID="{C7EBAF02-E886-478F-A217-AC8FB3D58374}"
|
||||
RootNamespace="cntraining"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\cntraining.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\cntraining.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Combine/extract/overwrite Tesseract data"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "combine_tessdata"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "combine_tessdata.exe"
|
||||
VALUE "ProductName", "Tesseract OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,217 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="combine_tessdata"
|
||||
ProjectGUID="{5787B7FA-DB72-488C-BDB2-2E95503B526C}"
|
||||
RootNamespace="combine_tessdata"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\combine_tessdata.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\combine_tessdata.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Converts a Tesseract DAWG to a wordlist"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "dawg2wordlist"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "dawg2wordlist.exe"
|
||||
VALUE "ProductName", "Tesseract OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,217 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="dawg2wordlist"
|
||||
ProjectGUID="{6343CFD6-8538-486E-97C6-9C47F0F7202B}"
|
||||
RootNamespace="dawg2wordlist"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\dawg2wordlist.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\dawg2wordlist.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 8.1 KiB |
@ -1,240 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
=========================
|
||||
Building |Tesseractocr|
|
||||
=========================
|
||||
|
||||
The Visual Studio 2008 Solution for |Tesseractocr| builds:
|
||||
|
||||
+ `libtesseract`
|
||||
|
||||
+ `tesseract.exe`
|
||||
|
||||
+ 9 training applications (for v3.02)
|
||||
|
||||
Unlike earlier Solutions only a single `libtesseract` library is
|
||||
generated --- the twelve projects matching the twelve source subfolders
|
||||
have been abandoned. They were deemed too complicated since they were
|
||||
never (rarely?) used by themselves, but only along with the entire
|
||||
library.
|
||||
|
||||
In addition, `libtesseract` and `tesseract.exe` can be built using four
|
||||
configurations: :guilabel:`LIB_Release`, :guilabel:`LIB_Debug`,
|
||||
:guilabel:`DLL_Release`, and :guilabel:`DLL_Debug`.
|
||||
|
||||
Two Visual Studio Property Sheets, `leptonica_versionnumbers.vsprops`
|
||||
and `tesseract_versionnumbers.vsprops`, are employed to isolate the
|
||||
Solution from changes in dependency version numbers (and isolate
|
||||
dependent Solutions). See :ref:`APITest's <APITest>` :ref:`LIB_Release
|
||||
<apitest-lib-release>` Linker :guilabel:`Additional Dependencies`
|
||||
settings for an example of what this looks like in practice. See
|
||||
|Leptonica|\ ’s explanation `About version numbers in library filenames
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/downloading-binaries.html#about-version-numbers>`_
|
||||
for the rationale behind using Property Sheets.
|
||||
|
||||
|
||||
Building `libtesseract` and `tesseract.exe`
|
||||
===========================================
|
||||
|
||||
1. Open `C:\\BuildFolder\\tesseract-3.0x\\vs2008\\tesseract.sln` in Visual
|
||||
Studio 2008.
|
||||
|
||||
You'll see the following projects in the :guilabel:`Solution
|
||||
Explorer` (for v3.02)::
|
||||
|
||||
ambiguous_words
|
||||
classifier_tester
|
||||
cntraining
|
||||
combine_tessdata
|
||||
dawg2wordlist
|
||||
libtesseract302
|
||||
mftraining
|
||||
shapeclustering
|
||||
tesseract
|
||||
unicharset_extractor
|
||||
wordlist2dawg
|
||||
|
||||
2. Select the build configuration you'd like to use from the
|
||||
:guilabel:`Solution Configurations` dropdown. It lists the following
|
||||
configurations::
|
||||
|
||||
DLL_Debug
|
||||
DLL_Release
|
||||
LIB_Debug
|
||||
LIB_Release
|
||||
|
||||
The `DLL_` configurations build the DLL version of `libtesseract-3.0x`
|
||||
(and link with the DLL version of Leptonica 1.68). The `LIB_`
|
||||
configurations build the static library version of `libtesseract-3.0x`
|
||||
(and link with the static version of Leptonica 1.68 and the required
|
||||
image libraries).
|
||||
|
||||
3. Build `libtesseract` by right-clicking the
|
||||
:guilabel:`libtesseract30x` project and choosing
|
||||
:menuselection:`B&uild` from the pop-up menu.
|
||||
|
||||
The resultant library will be written to the
|
||||
`C:\\BuildFolder\\tesseract-3.0x\\vs2008\\<ConfigurationName>` directory
|
||||
where `<ConfigurationName>` is the same as the build configuration you
|
||||
selected earlier. It is also copied to the `C:\\BuildFolder\\lib` folder
|
||||
to make it easy to link your own applications to `libtesseract`.
|
||||
|
||||
The library is named as follows (for v3.02):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
static libraries:
|
||||
|
||||
`libtesseract302-static.lib`
|
||||
`libtesseract302-static-debug.lib`
|
||||
|
||||
DLLs:
|
||||
|
||||
`libtesseract302.lib` (import library)
|
||||
`libtesseract302.dll`
|
||||
`libtesseract302d.lib` (import library)
|
||||
`libtesseract302d.dll`
|
||||
|
||||
4. Build the main tesseract OCR application by right-clicking the
|
||||
:guilabel:`tesseract` project and choosing :menuselection:`B&uild`.
|
||||
|
||||
The resultant executable will be written to the
|
||||
`C:\\BuildFolder\\tesseract-3.0x\\vs2008\\<ConfigurationName>` directory
|
||||
where `<ConfigurationName>` is the same as the build configuration you
|
||||
selected earlier. It is named as follows:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
LIB_Release: `tesseract.exe`
|
||||
LIB_Debug: `tesseractd.exe`
|
||||
DLL_Release: `tesseract-dll.exe`
|
||||
DLL_Debug: `tesseract-dlld.exe`
|
||||
|
||||
|
||||
Testing `tesseract.exe`
|
||||
=======================
|
||||
|
||||
It's usually better to make a separate directory to test
|
||||
`tesseract.exe`. To run tesseract, you either need to make sure your
|
||||
test directory contains the `tessdata` tesseract language data folder or
|
||||
you set the ``TESSDATA_PREFIX`` environment variable to point to it. See
|
||||
http://code.google.com/p/tesseract-ocr/wiki/ReadMe for important
|
||||
details.
|
||||
|
||||
For example, you can use the following directory structure::
|
||||
|
||||
C:\BuildFolder\
|
||||
include\
|
||||
lib\
|
||||
tesseract-3.02\
|
||||
testing\
|
||||
tessdata\
|
||||
|
||||
Copy your tesseract executable to `C:\\BuildFolder\\testing`. If you
|
||||
built a DLL version then be sure to also copy the required DLLs to the
|
||||
same directory (or add `C:\\BuildFolder\\lib` to your ``PATH`` --
|
||||
However, this isn't really recommended).
|
||||
|
||||
For example, if you are trying to run `tesseractd.exe` then you'll need
|
||||
to also copy the following to `C:\\BuildFolder\\testing`::
|
||||
|
||||
liblept168d.dll
|
||||
libtesseract302d.dll
|
||||
|
||||
Copy a few test images to `C:\\BuildFolder\\testing` just to make it easy
|
||||
to run test commands.
|
||||
|
||||
Test tesseract by doing something like the following::
|
||||
|
||||
tesseractd.exe eurotext.tif eurotext
|
||||
|
||||
This will create a file called `eurotext.txt` that will contain the
|
||||
result of OCRing `eurotext.tif`.
|
||||
|
||||
|
||||
Building the training applications
|
||||
==================================
|
||||
|
||||
The training related applications are built using the following
|
||||
projects::
|
||||
|
||||
ambiguous_words
|
||||
classifier_tester
|
||||
cntraining
|
||||
combine_tessdata
|
||||
dawg2wordlist
|
||||
mftraining
|
||||
shapeclustering
|
||||
unicharset_extractor
|
||||
wordlist2dawg
|
||||
|
||||
.. note::
|
||||
|
||||
Currently these applications can **ONLY** be built with the LIB_Debug
|
||||
and LIB_Release configurations. If you try to use a DLL configuration
|
||||
you'll get "undefined external symbol" errors.
|
||||
|
||||
To build one of the above training applications, simply right-click one
|
||||
of the projects in the Solution Explorer, and choose
|
||||
:menuselection:`B&uild` from the pop-up menu.
|
||||
|
||||
Alternatively, you can build :bi:`everything` in the Solution by
|
||||
choosing :menuselection:`&Build --> &Build Solution` (:kbd:`Ctrl+Shift+B`)
|
||||
from the menu bar.
|
||||
|
||||
See http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3 for
|
||||
more information on using these applications.
|
||||
|
||||
|
||||
.. _building-with-vc2008-express:
|
||||
|
||||
Building |Tesseractocr| with Visual C++ 2008 Express Edition
|
||||
============================================================
|
||||
|
||||
The Solution file that comes with |Tesseractocr| was created with Visual
|
||||
Studio 2008, and is compatible for the most part with the free `Visual
|
||||
C++ 2008 Express Edition
|
||||
<http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express>`_. You
|
||||
might, however, sometimes see the following error message::
|
||||
|
||||
Fatal error RC1015: cannot open include file 'afxres.h'
|
||||
|
||||
.. _version-resource:
|
||||
|
||||
The Solution uses resource files to set application and DLL properties
|
||||
that are visible on Windows 7 when you right-click them in Windows
|
||||
Explorer, choose :menuselection:`Properties`, and look at the
|
||||
:guilabel:`Details` tab (the :guilabel:`Version` tab on Windows XP).
|
||||
|
||||
.. image:: images/dll_properties_details_tab.png
|
||||
:align: center
|
||||
:alt: Windows 7 Properties' Details Tab
|
||||
|
||||
Unfortunately, the Express Edition doesn't include the Resource
|
||||
Editor. So in all resource files::
|
||||
|
||||
#include "afxres.h"
|
||||
|
||||
has to be changed to::
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
If someone has used the VS2008 Resource Editor to change a `.rc` file
|
||||
associated with an application or DLL and forgotten to make these
|
||||
changes before checking the file in, you'll see the above "Fatal error"
|
||||
message. Simply manually make the change to fix the error.
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,35 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
.. _vs2008_developer_notes:
|
||||
|
||||
=======================================================
|
||||
Visual Studio 2008 Developer Notes for |Tesseractocr|
|
||||
=======================================================
|
||||
|
||||
:date: February 23, 2012
|
||||
|
||||
.. toctree::
|
||||
|
||||
overview
|
||||
setup
|
||||
building
|
||||
programming
|
||||
tools
|
||||
maintenance
|
||||
vs2010-notes
|
||||
versions
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,256 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==================================
|
||||
Maintaining the VS2008 directory
|
||||
==================================
|
||||
|
||||
This section is geared towards project maintainers of the
|
||||
`tesseract-3.0x\\vs2008` directory, rather than users of it.
|
||||
|
||||
Python 2.7.x (*not* 3.x) is required for this section. The recommended
|
||||
version is the `latest from ActiveState
|
||||
<http://www.activestate.com/activepython/downloads>`_.
|
||||
|
||||
.. _tesshelper:
|
||||
|
||||
The `tesshelper.py` Python script
|
||||
=================================
|
||||
|
||||
`tesshelper.py` performs a number of useful maintenance related
|
||||
operations on the `tesseract-3.0x\\vs2008` directory. To run it, first
|
||||
open a Command Prompt window and navigate to the `<tesseract install
|
||||
dir>\\vs2008` directory.
|
||||
|
||||
Then entering the following command::
|
||||
|
||||
python tesshelper.py --help
|
||||
|
||||
displays the following help message::
|
||||
|
||||
usage: tesshelper.py [-h] [--version] tessDir {compare,report,copy,clean} ...
|
||||
|
||||
positional arguments:
|
||||
tessDir tesseract installation directory
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--version show program's version number and exit
|
||||
|
||||
Commands:
|
||||
{compare,report,copy,clean}
|
||||
compare compare libtesseract Project with tessDir
|
||||
report report libtesseract summary stats
|
||||
copy copy public libtesseract header files to includeDir
|
||||
clean clean vs2008 folder of build folders and .user files
|
||||
|
||||
Examples:
|
||||
|
||||
Assume that tesshelper.py is in c:\buildfolder\tesseract-3.01\vs2008,
|
||||
which is also the current directory. Then,
|
||||
|
||||
python tesshelper .. compare
|
||||
|
||||
will compare c:\buildfolder\tesseract-3.01 "library" directories to the
|
||||
libtesseract Project
|
||||
(c:\buildfolder\tesseract-3.01\vs2008\libtesseract\libtesseract.vcproj).
|
||||
|
||||
python tesshelper .. report
|
||||
|
||||
will display summary stats for c:\buildfolder\tesseract-3.01 "library"
|
||||
directories and the libtesseract Project.
|
||||
|
||||
python tesshelper .. copy ..\..\include
|
||||
|
||||
will copy all "public" libtesseract header files to
|
||||
c:\buildfolder\include.
|
||||
|
||||
python tesshelper .. clean
|
||||
|
||||
will clean the vs2008 folder of all build directories, and .user, .suo,
|
||||
.ncb, and other temp files.
|
||||
|
||||
Generating the documentation
|
||||
============================
|
||||
|
||||
The source files for the documentation you are currently reading are
|
||||
written in `reStructuredText
|
||||
<http://docutils.sourceforge.net/rst.html>`_ and processed with the
|
||||
`Sphinx Python Documentation Generator
|
||||
<http://sphinx.pocoo.org/index.html>`_.
|
||||
|
||||
To install Sphinx, go to your `<python.2.7.x install dir>\\scripts`
|
||||
directory and just do::
|
||||
|
||||
easy_install -U Sphinx
|
||||
|
||||
which will download Sphinx and all its dependencies. [Note: This might
|
||||
*not* install the Python Imaging Library. If not, then also do
|
||||
``easy_install -U PIL`` or download it from `here
|
||||
<http://www.pythonware.com/products/pil/>`__.]
|
||||
|
||||
To generate this |Tesseractocr| VS2008 documentation go to
|
||||
`tesseract-3.0x\\vs2008\\Sphinx` and do::
|
||||
|
||||
make clean
|
||||
make html
|
||||
|
||||
Which will create a number of items in
|
||||
`tesseract-3.0x\\vs2008\\Sphinx\\_build\\html`.
|
||||
|
||||
Copy everything there to the distribution's `tesseract-3.0x\\vs2008\\doc`
|
||||
folder, :bi:`except` for::
|
||||
|
||||
.buildinfo
|
||||
objects.inv
|
||||
|
||||
.. _updating-vs2008-directory:
|
||||
|
||||
Updating the VS2008 directory for new releases of |Tesseractocr|
|
||||
================================================================
|
||||
|
||||
1. Change the version number strings in
|
||||
`tesseract-3.0x\\vs2008\\include\\tesseract_versionnumbers.vsprops`.
|
||||
|
||||
#. Change the version number in
|
||||
`tesseract-3.0x\\vs2008\\port\\version.h`.
|
||||
|
||||
#. Open up a Command Prompt window, and do the following::
|
||||
|
||||
cd <tesseract-3.0x install dir>\vs2008
|
||||
python tesshelper .. compare
|
||||
|
||||
This will list all added and missing items in the `<tesseract-3.0x install
|
||||
dir>` directories that are used to build `libtesseract`. For the
|
||||
newly added items ignore::
|
||||
|
||||
api\tesseractmain.cpp
|
||||
api\tesseractmain.h
|
||||
ccutil\scanutils.cpp
|
||||
ccutil\scanutils.h
|
||||
|
||||
and for the newly missing items ignore::
|
||||
|
||||
training\commontraining.cpp
|
||||
training\commontraining.h
|
||||
training\tessopt.cpp
|
||||
training\tessopt.h
|
||||
|
||||
#. Open up the `tesseract.sln` in Visual Studio 2008 (or Visual C++ 2008
|
||||
Express Edition but see :ref:`this
|
||||
<building-with-vc2008-express>` first).
|
||||
|
||||
a. In the Solution Explorer, rename the :guilabel:`libtesseract-3.0x`
|
||||
Project to the correct version number to make it obvious which
|
||||
version of |Tesseractocr| this Solution is for.
|
||||
|
||||
#. Remove the missing items from the :guilabel:`libtesseract-3.0x` Project.
|
||||
|
||||
#. Add the new items to the :guilabel:`libtesseract-3.0x` Project.
|
||||
|
||||
If there were a lot of new items, you can use the `newheaders.txt`
|
||||
and `newsources.txt` files generated by running the
|
||||
`tesshelper.py` script with the ``compare`` command. Close the
|
||||
Solution, and then you can directly edit
|
||||
`libtesseract\\libtesseract.vcproj` to add them to the appropriate
|
||||
``<Filter> ... </Filter>`` section (either ``Header Files`` or
|
||||
``Source Files``).
|
||||
|
||||
#. With the Solution closed, use a text editor to change all the
|
||||
Project's `.rc` files to reflect the new version.
|
||||
|
||||
If you have a program like the *non-free* `PowerGrep
|
||||
<http://www.powergrep.com/>`_, you can use it to change all the
|
||||
`.rc` files in one fell swoop.
|
||||
|
||||
Alternatively, you can edit the Version resources within Visual
|
||||
Studio 2008 (but *not* Visual C++ 2008 Express Edition) and then
|
||||
manually make the changes mentioned :ref:`here
|
||||
<building-with-vc2008-express>` afterwards.
|
||||
|
||||
.. _copying_a_project:
|
||||
|
||||
#. If a new training application was added (edit
|
||||
`tesseract-3.0x\\training\\Makefile.am` and look at the
|
||||
``bin_PROGRAMS`` variable to see the list), the easiest thing to do
|
||||
is copy another existing training application Project and manually
|
||||
change it.
|
||||
|
||||
For example, assuming the new training application is
|
||||
called `new_trainer.exe`, with the Solution closed:
|
||||
|
||||
a. Copy the `ambiguous_words` directory to a new directory called
|
||||
`new_trainer`.
|
||||
|
||||
#. Change the `new_trainer\\ambiguous_words.rc` filename to
|
||||
`new_trainer\\new_trainer.rc`.
|
||||
|
||||
#. Change the `new_trainer\\ambiguous_words.vcproj` filename to
|
||||
`new_trainer\\new_trainer.vcproj`.
|
||||
|
||||
#. Edit `new_trainer\\new_trainer.rc` and change all occurrences of
|
||||
``ambiguous_words`` to ``new_trainer``.
|
||||
|
||||
Also change ``FileDescription`` to describe the new application.
|
||||
|
||||
#. Open up the |Tesseractocr| Solution file and right-click the
|
||||
:guilabel:`Solution:'tesseract'` in the Solution Explorer. Choose
|
||||
:menuselection:`A&dd --> &Existing Project...` from the context
|
||||
menu and add the `new_trainer\\new_trainer.vcproj` you just
|
||||
created.
|
||||
|
||||
#. Right-click the newly added Project, and choose
|
||||
:menuselection:`Project Dependencie&s...`.
|
||||
|
||||
The :guilabel:`Project Dependencies` Dialog will open. Make sure
|
||||
that `libtesseract30x` is checked. If you forget this step, Visual
|
||||
Studio will not automatically link with `libtesseract` and
|
||||
you'll get lots of "unresolved external symbol" errors.
|
||||
|
||||
This actually goes pretty fast. It should only take you a minute or
|
||||
so to add a new application to the |Tesseractocr| Solution.
|
||||
|
||||
#. (Optional?) Edit `vs2008\\Sphinx\\versions.rst` and add a new entry
|
||||
describing the changes made for this new version.
|
||||
|
||||
#. To make your working directory suitable for reposting back to the
|
||||
|Tesseractocr| SVN repository, you need to ignore all the following:
|
||||
|
||||
+ All `LIB_Release`, `LIB_Debug`, `DLL_Release`, `DLL_Debug`
|
||||
directories
|
||||
+ All `.suo` files
|
||||
+ All `.user` files
|
||||
+ All `.ncb` files
|
||||
+ `vs2008\\newheaders.txt`
|
||||
+ `vs2008\\newsources.txt`
|
||||
|
||||
Optionally, the `tesshelper.py` script has the ``clean`` command
|
||||
which will remove the above items. To run it, open a Command Prompt
|
||||
window and then do::
|
||||
|
||||
cd <tesseract-3.0x install dir>\vs2008
|
||||
python tesshelper .. clean
|
||||
|
||||
The script will respond with the following::
|
||||
|
||||
Are you sure you want to clean the
|
||||
"C:\BuildFolder\tesseract-3.0x\vs2008" folder (Yes/No) [No]? yes
|
||||
Only list the items to be deleted (Yes/No) [Yes]? no
|
||||
|
||||
You have to answer ``yes`` and then ``no`` to the prompts. Otherwise
|
||||
either the script will just exit, or only list the items that will be
|
||||
removed instead of actually removing them (which is a good thing to
|
||||
try first just in case).
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,87 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==========
|
||||
Overview
|
||||
==========
|
||||
|
||||
The recommended audience for this document are developers who want to
|
||||
use Microsoft Visual Studio 2008 with `Tesseract-OCR
|
||||
<http://code.google.com/p/tesseract-ocr/>`_. If you simply want to *run*
|
||||
`tesseract` or its various language training applications, then see the
|
||||
`ReadMe <http://code.google.com/p/tesseract-ocr/wiki/ReadMe>`_. You'll
|
||||
find instructions there on how to download tesseract's Windows
|
||||
installer.
|
||||
|
||||
|Tesseractocr| consists of:
|
||||
|
||||
+ `libtesseract` -- the static (or dynamic) library that does all the
|
||||
actual work. As of February 2012 it consists of 260+ `C++` files
|
||||
along with 290+ header files.
|
||||
|
||||
+ `tesseract.exe` -- the command-line OCR engine. It's built from a
|
||||
single, small `C++` file that just calls functions in
|
||||
`libtesseract`. There currently isn't very much documentation on how
|
||||
to use `tesseract.exe`, but you can look at what's there in the
|
||||
repository's `doc
|
||||
<http://code.google.com/p/tesseract-ocr/source/browse/#svn%2Ftrunk%2Fdoc>`_
|
||||
subdirectory.
|
||||
|
||||
+ Language packs -- needed by `tesseract.exe` in order to recognize
|
||||
particular languages.
|
||||
|
||||
.. _training-applications:
|
||||
|
||||
+ Language training applications -- used to teach `tesseract.exe` new
|
||||
languages. Each has their own (very brief) man page in the `doc
|
||||
<http://code.google.com/p/tesseract-ocr/source/browse/#svn%2Ftrunk%2Fdoc>`_
|
||||
subdirectory and include:
|
||||
|
||||
+ `ambiguous_words.exe` -- generate sets of words Tesseract is likely
|
||||
to find ambiguous
|
||||
|
||||
+ `classifier_tester` -- tests a Tesseract character classifier on
|
||||
data as formatted for training
|
||||
|
||||
+ `cntraining.exe` -- character normalization training
|
||||
|
||||
+ `combine_tessdata.exe` -- combine/extract/overwrite Tesseract data
|
||||
|
||||
+ `dawg2wordlist.exe` -- convert a Tesseract DAWG to a wordlist
|
||||
|
||||
+ `mftraining.exe` -- feature training
|
||||
|
||||
+ `shapeclustering.exe` -- shape clustering training
|
||||
|
||||
+ `unicharset_extractor.exe` -- extract unicharset from Tesseract
|
||||
boxfiles
|
||||
|
||||
+ `wordlist2dawg.exe` -- convert a wordlist to a DAWG
|
||||
|
||||
Their use is described in the `TrainingTesseract3
|
||||
<http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3>`_
|
||||
Wiki page.
|
||||
|
||||
This document explains how to:
|
||||
|
||||
+ :doc:`Setup <setup>` the proper directory structure required to use
|
||||
the supplied Visual Studio 2008 Solution
|
||||
|
||||
* :doc:`Build <building>` `libtesseract`, `tesseract.exe`, and the
|
||||
training apps
|
||||
|
||||
* :doc:`Write <programming>` programs that link with `libtesseract`
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,479 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
=================================
|
||||
Programming with `libtesseract`
|
||||
=================================
|
||||
|
||||
To use `libtesseract` in your own application you need to include
|
||||
|Leptonica|\ ’s `allheaders.h`, and |Tesseractocr|\ ’s `baseapi.h` and
|
||||
`strngs.h`.
|
||||
|
||||
|Tesseractocr| uses `liblept` mainly for image I/O, but you can also use
|
||||
any of |Leptonica|\ ’s *many* image processing functions on ``PIX``,
|
||||
while at the same time calling ``TessBaseAPI`` methods. See the
|
||||
`Leptonica documentation <http://tpgit.github.com/UnOfficialLeptDocs/>`_
|
||||
for more details.
|
||||
|
||||
There doesn't seem to be any documentation on `api\\baseapi.h`, but it
|
||||
has extensive comments. You can also look at the :ref:`APITest` and
|
||||
:ref:`APIExamples` projects.
|
||||
|
||||
See the :ref:`APITest` project for an example of which compiler and
|
||||
linker settings you need for various build configurations. The easiest
|
||||
way to begin a new application is to just make a copy of the `APITest`
|
||||
directory. See :ref:`this step <copying_a_project>` for detailed
|
||||
instructions (skip the last step about adding :guilabel:`Project
|
||||
Dependencies`).
|
||||
|
||||
If you want to manually set the required settings, then here's the list
|
||||
of things to do:
|
||||
|
||||
1. Add the following :guilabel:`Preprocessor Definitions` when compiling
|
||||
any files that include `baseapi.h` and you are linking with the
|
||||
static library versions of `libtesseract`::
|
||||
|
||||
USE_STD_NAMESPACE
|
||||
|
||||
If you are linking with the DLL versions of `libtesseract` instead
|
||||
add::
|
||||
|
||||
USE_STD_NAMESPACE;TESSDLL_IMPORTS;CCUTIL_IMPORTS;LIBLEPT_IMPORTS
|
||||
|
||||
#. Be sure to add the following to :guilabel:`Additional Include
|
||||
Directories`::
|
||||
|
||||
C:\BuildFolder\include
|
||||
C:\BuildFolder\include\leptonica
|
||||
|
||||
C:\BuildFolder\include\tesseract or
|
||||
|
||||
<tesseract-3.0x dir> (all its sub-directories that contain header files)
|
||||
|
||||
#. Add `C:\\BuildFolder\\lib` to your :guilabel:`Additional Library
|
||||
Directories`.
|
||||
|
||||
#. In the `C:\\BuildFolder\\include` directory are two Visual Studio
|
||||
Property Sheet files::
|
||||
|
||||
tesseract_versionnumbers.vsprops
|
||||
leptonica_versionnumbers.vsprops
|
||||
|
||||
Using `tesseract_versionnumbers.vsprops` (which automatically inherits
|
||||
`leptonica_versionnumbers.vsprops`) can make it easier to specify the
|
||||
libraries you need to import. For example, when creating a staticly
|
||||
linked debug executable you can say::
|
||||
|
||||
zlib$(ZLIB_VERSION)-static-mtdll-debug.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static-debug.lib
|
||||
|
||||
to make your application less dependent on library version numbers.
|
||||
|
||||
To add the Property Sheet to a Project, open its :guilabel:`Properties
|
||||
Pages` Dialog, and set the :guilabel:`Configuration Properties |
|
||||
General | Inherited Project Property Sheets` item to::
|
||||
|
||||
..\..\..\include\tesseract_versionnumbers.vsprops
|
||||
|
||||
Choosing :menuselection:`&View --> Oth&er Windows --> Property
|
||||
&Manager` from the menubar will let you see the Properties attached
|
||||
to each Project's configurations.
|
||||
|
||||
.. note::
|
||||
|
||||
The DLL versions of |libtess| currently only export the
|
||||
``TessBaseAPI`` C++ class from `baseapi.h`, there is no C function
|
||||
interface yet.
|
||||
|
||||
.. note::
|
||||
|
||||
The DLL versions of `libtesseract` currently only export the
|
||||
``TessBaseAPI`` and ``STRING`` classes. In theory, all you need is
|
||||
are those classes. However, if you find yourself having to manipulate
|
||||
other "internal" tesseract objects then you currently have to link
|
||||
with the **static library** versions of `libtesseract`.
|
||||
|
||||
.. warning::
|
||||
|
||||
The Release versions of |liblept|, by design, *never* print out any
|
||||
possibly helpful messages to the console. Therefore, it is highly
|
||||
recommended that you do your initial development using the Debug
|
||||
versions of |liblept|. See `Compile-time control over stderr output
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/leptonica/README.html#compile-time-control-over-stderr-output>`_
|
||||
for details.
|
||||
|
||||
<<<Need to add the URL of the zip file that contains include & lib
|
||||
directory contents for those people who don't want to build libtesseract
|
||||
themselves>>>
|
||||
|
||||
|
||||
Debugging Tips
|
||||
==============
|
||||
|
||||
Before debugging programs written with `libtesseract`, you should first
|
||||
download the latest Leptonica sources (currently
|
||||
`leptonica-1.68.tar.gz`) and VS2008 source package (`vs2008-1.68.zip`)
|
||||
from:
|
||||
|
||||
+ http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68.tar.gz
|
||||
+ http://code.google.com/p/leptonica/downloads/detail?name=vs2008-1.68.zip
|
||||
|
||||
Unpack them to `C:\\BuildFolder` to get the following directory structure::
|
||||
|
||||
C:\BuildFolder\
|
||||
include\
|
||||
lib\
|
||||
leptonica-1.68\
|
||||
vs2008\
|
||||
tesseract-3.02\
|
||||
vs2008\
|
||||
testing\
|
||||
tessdata\
|
||||
|
||||
(see `Building the liblept library
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/building-liblept.html>`_
|
||||
for more information)
|
||||
|
||||
|Tesseractocr| uses |Leptonica| "under the hood" for all (most? some?)
|
||||
of its image processing operations. Having the source available (and
|
||||
compiling it in debug mode) will make it easier to see what's really
|
||||
going on.
|
||||
|
||||
You might want to add
|
||||
`C:\\BuildFolder\\leptonica-1.68\\vs2008\\leptonica.vcproj` and
|
||||
`C:\\BuildFolder\\tesseract-3.02\\vs2008\\libtesseract\\libtesseract.vcproj`
|
||||
to your solution by right-clicking it and choosing :menuselection:`A&dd -->
|
||||
&Existing Project...`. This seems to make VS2008's Intellisense `work
|
||||
better
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/building-other-programs.html#intellisense-and-liblept>`_
|
||||
when finding "external" source files.
|
||||
|
||||
Definitely create a ``TESSDATA_PREFIX``x environment variable so that it
|
||||
contains the absolute path of the directory that contains the
|
||||
``tessdata`` directory. Otherwise you'll have to put a ``tessdata``
|
||||
directory in every temporary build folder which quickly becomes painful
|
||||
(especially since tessdata has gotten very big --- 600MB!).
|
||||
|
||||
|
||||
.. _APITest:
|
||||
|
||||
APITest Sample
|
||||
==============
|
||||
|
||||
The :guilabel:`APITest` Solution contains the minimal settings needed to
|
||||
link with `libtesseract`. It demonstrates the typical situation, where
|
||||
the "external" application's source files reside *outside* of the
|
||||
`tesseract-3.0x` directory tree.
|
||||
|
||||
To build the `vs2008\\APITest` Solution, first copy it to your
|
||||
`C:\\BuildFolder` directory. This should now look like::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
tesseract\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtesseract302.dll
|
||||
libtesseract302.lib
|
||||
libtesseract302d.dll
|
||||
libtesseract302d.lib
|
||||
libtesseract302-static.lib
|
||||
libtesseract302-static-debug.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
tesseract-3.02\
|
||||
|
||||
APITest\
|
||||
baseapitester\
|
||||
baseapitester.cpp
|
||||
baseapitester.rc
|
||||
baseapitester.vcproj
|
||||
resource.h
|
||||
stdafx.cpp
|
||||
stdafx.h
|
||||
targetver.h
|
||||
APITest.sln
|
||||
|
||||
The :guilabel:`APITest` contains just the :guilabel:`baseapitester`
|
||||
project. This was created using the VS2008 :guilabel:`Win32 Console
|
||||
Application` Project Wizard and then just copying most of
|
||||
`tesseractmain.cpp` and making minor edits. Its settings correctly refer
|
||||
to the "public" `include` and `lib` directories using relative paths.
|
||||
|
||||
It assumes that the `C:\\BuildFolder\\include` directory has been
|
||||
properly setup. See :ref:`this <copying-headers>` for more details.
|
||||
|
||||
The `C:\\BuildFolder\\lib` directory will automatically get
|
||||
`libtesseract` copied to it whenever it is built.
|
||||
|
||||
The `include\\tesseract_versionnumbers.vsprops` Property Sheet is used
|
||||
to avoid explicit library version number dependencies. Precompiled
|
||||
headers are used. :guilabel:`LIB_Release`, :guilabel:`LIB_Debug`,
|
||||
:guilabel:`DLL_Release`, and :guilabel:`DLL_Debug` build configurations
|
||||
are supported.
|
||||
|
||||
The following are the compiler command lines and linker options
|
||||
used. See `Compiling a C/C++ Program | Compiler Options
|
||||
<http://msdn.microsoft.com/en-us/library/9s7c9wdw(v=vs.90).aspx>`_ for a
|
||||
detailed explanation of these options.
|
||||
|
||||
.. _apitest-lib-release:
|
||||
|
||||
:guilabel:`LIB_Release` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/O2
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "NDEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/FD /EHsc /MD /Yc"stdafx.h"
|
||||
/Fp"LIB_Release\baseapitester.pch" /Fo"LIB_Release\\"
|
||||
/Fd"LIB_Release\vc90.pdb"
|
||||
/W3 /nologo /c
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`LIB_Release` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
zlib$(ZLIB_VERSION)-static-mtdll.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static.lib
|
||||
|
||||
:guilabel:`LIB_Debug` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/Od
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "_DEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/FD /EHsc /RTC1 /MDd /Yc"stdafx.h"
|
||||
/Fp"LIB_Debug\baseapitesterd.pch" /Fo"LIB_Debug\\"
|
||||
/Fd"LIB_Debug\vc90.pdb"
|
||||
/W3 /nologo /c /Z7
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`LIB_Debug` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
zlib$(ZLIB_VERSION)-static-mtdll-debug.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static-debug.lib
|
||||
|
||||
:guilabel:`DLL_Release` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/O2
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "NDEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/D "TESSDLL_IMPORTS" /D "CCUTIL_IMPORTS" /D "LIBLEPT_IMPORTS"
|
||||
/FD /EHsc /MD /Yc"stdafx.h"
|
||||
/Fp"DLL_Release\baseapitester-dll.pch" /Fo"DLL_Release\\"
|
||||
/Fd"DLL_Release\vc90.pdb"
|
||||
/W3 /nologo /c
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`DLL_Release` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
liblept$(LIBLEPT_VERSION).lib
|
||||
libtesseract$(LIBTESS_VERSION).lib
|
||||
|
||||
:guilabel:`DLL_Debug` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/Od
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "_DEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/D "TESSDLL_IMPORTS" /D "CCUTIL_IMPORTS" /D "LIBLEPT_IMPORTS"
|
||||
/FD /EHsc /RTC1 /MDd /Yc"stdafx.h"
|
||||
/Fp"DLL_Debug\baseapitester-dlld.pch" /Fo"DLL_Debug\\"
|
||||
/Fd"DLL_Debug\vc90.pdb"
|
||||
/W3 /nologo /c /Z7
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`DLL_Debug` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
liblept$(LIBLEPT_VERSION)d.lib
|
||||
libtesseract$(LIBTESS_VERSION)d.lib
|
||||
|
||||
|
||||
.. _APIExamples:
|
||||
|
||||
APIExamples
|
||||
===========
|
||||
|
||||
<<<NEEDS WORK>>>
|
||||
|
||||
Currently two Projects are in this solution:
|
||||
|
||||
+ preprocessing -- Demonstrates how to use |Leptonica|\ ’s image
|
||||
processing functions to clean up images *before* calling
|
||||
``TessBaseAPI::SetImage()``.
|
||||
|
||||
+ getinfo -- Demonstrates calling various ``TessBaseAPI`` methods to get
|
||||
back information on the OCR process.
|
||||
|
||||
|
||||
|
||||
|Tesseractocr| preprocessor definitions
|
||||
=======================================
|
||||
|
||||
``HAVE_CONFIG_H``
|
||||
Only defined when building under Linux. This causes the inclusion of
|
||||
`config_auto.h`, which is only auto-generated during the `./configure`
|
||||
process and thus *not* visible on Windows.
|
||||
|
||||
This is what sets the ``VERSION`` macro (and lots of other
|
||||
configuration related macros).
|
||||
|
||||
|
||||
``TESSDLL_EXPORTS``
|
||||
Only used when *building* DLL versions of |libtess|.
|
||||
|
||||
``TESSDLL_IMPORTS``
|
||||
Should be defined when building apps that link to a DLL version of
|
||||
|libtess|. Used as follows in `baseapi.h`::
|
||||
|
||||
#ifdef TESSDLL_EXPORTS
|
||||
#define TESSDLL_API __declspec(dllexport)
|
||||
#elif defined(TESSDLL_IMPORTS)
|
||||
#define TESSDLL_API __declspec(dllimport)
|
||||
#else
|
||||
#define TESSDLL_API
|
||||
#endif
|
||||
|
||||
If you don't define this then you'll get "undefined external symbol"
|
||||
errors.
|
||||
|
||||
``TESSDLL_API``
|
||||
Used to mark classes for export (visibility) in DLL versions of
|
||||
|libtess|. Currently *only* used with the ``TestBaseAPI`` class.
|
||||
|
||||
|
||||
``CCUTIL_EXPORTS``
|
||||
Only used when *building* DLL versions of |libtess|.
|
||||
|
||||
``CCUTIL_IMPORTS``
|
||||
Should be defined when building apps that link to a DLL version of
|
||||
|libtess|. Used as follows in `strngs.h`::
|
||||
|
||||
#ifdef CCUTIL_EXPORTS
|
||||
#define CCUTIL_API __declspec(dllexport)
|
||||
#elif defined(CCUTIL_IMPORTS)
|
||||
#define CCUTIL_API __declspec(dllimport)
|
||||
#else
|
||||
#define CCUTIL_API
|
||||
#endif
|
||||
|
||||
If you don't define this then you'll get "undefined external symbol STRING"
|
||||
errors.
|
||||
|
||||
|
||||
``LIBLEPT_IMPORTS``
|
||||
Should be defined when building apps that link to a DLL version of
|
||||
|Leptonica|. Used as follows in environ.h::
|
||||
|
||||
#if defined(LIBLEPT_EXPORTS) || defined(LEPTONLIB_EXPORTS)
|
||||
#define LEPT_DLL __declspec(dllexport)
|
||||
#elif defined(LIBLEPT_IMPORTS) || defined(LEPTONLIB_IMPORTS)
|
||||
#define LEPT_DLL __declspec(dllimport)
|
||||
#else
|
||||
#define LEPT_DLL
|
||||
#endif
|
||||
|
||||
If you don't define this then you'll get "undefined external symbol"
|
||||
errors.
|
||||
|
||||
``USE_STD_NAMESPACE``
|
||||
Causes the following to be done::
|
||||
|
||||
#ifdef USE_STD_NAMESPACE
|
||||
using std::string;
|
||||
using std::vector;
|
||||
#endif
|
||||
|
||||
|
||||
``_WIN32``
|
||||
Used to indicate that the build target is Windows 32-bit or
|
||||
64-bit (``WIN32`` and ``WINDOWS`` are also added by the New Project
|
||||
Wizards).
|
||||
|
||||
See `C/C+ Preprocessor Reference | The Preprocessor | Macros |
|
||||
Predefined Macros
|
||||
<http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.90).aspx>`_ for
|
||||
the complete list for Visual Studio 2008.
|
||||
|
||||
``_MSC_VER``
|
||||
Used to check specifically for building with the VC++ compiler (as
|
||||
opposed to the MinGW gcc compiler).
|
||||
|
||||
``_USRDLL``
|
||||
Only defined when building the DLL versions of `libtesseract`.
|
||||
|
||||
``_MBCS``
|
||||
Automatically defined when :guilabel:`Configuration Properties |
|
||||
General | Character Set` is set to :guilabel:`Use Multi-Byte
|
||||
Character Set`.
|
||||
|
||||
|
||||
``DLLSYM``
|
||||
`Obsolete
|
||||
<http://groups.google.com/group/tesseract-dev/msg/5e0f7f7fab27b463>`_
|
||||
and can be ignored.
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,280 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
===========================
|
||||
Setting up |Tesseractocr|
|
||||
===========================
|
||||
|
||||
The Visual Studio 2008 Solutions included with |Tesseractocr|, rely on
|
||||
*relative paths* to reference files and directories --- including
|
||||
locations that are *outside* of the `tesseract-3.0x` tree. It is
|
||||
therefore vitally important to correctly set up the directories for the
|
||||
various components. This section describes how to do this.
|
||||
|
||||
|
||||
.. _directory-setup:
|
||||
|
||||
Initial "Build" directory setup
|
||||
===============================
|
||||
|
||||
First create an empty directory where you will unpack all the required
|
||||
downloads. Assume you call this directory `C:\\BuildFolder`.
|
||||
|
||||
.. _download-leptonica:
|
||||
|
||||
1. Download the |Leptonica| 1.68 pre-built binary package
|
||||
(`leptonica-1.68-win32-lib-include-dirs.zip`) from:
|
||||
|
||||
http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip
|
||||
|
||||
and unpack it to `C:\\BuildFolder`.
|
||||
|
||||
2. |Leptonica|, even on Windows as of v1.68, still requires a few unix
|
||||
utilities (like `rm`, `diff`, `sleep`). The easiest way to deal with
|
||||
this is to follow the instructions at `Installing Cygwin coreutils
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-cygwin.html>`_.
|
||||
|
||||
At this point, if all you want to do is link with `libtesseract` you can
|
||||
`download <http://code.google.com/p/tesseract-ocr/downloads/list>`_ the
|
||||
file that just contains the "public" |Tesseractocr| headers along with
|
||||
the precompiled library binaries for Windows. Unpack it to
|
||||
`C:\\BuildFolder` and you'll now have::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
tesseract\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtesseract302.dll
|
||||
libtesseract302.lib
|
||||
libtesseract302d.dll
|
||||
libtesseract302d.lib
|
||||
libtesseract302-static.lib
|
||||
libtesseract302-static-debug.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
and you can skip the rest of this page and go directly to
|
||||
:doc:`programming`.
|
||||
|
||||
The recommended action, however, is to download the |Tesseractocr|
|
||||
sources and build them yourself. Therefore...
|
||||
|
||||
3. Download the |Tesseractocr| Visual Studio 2008 source files from the
|
||||
`downloads page
|
||||
<http://code.google.com/p/tesseract-ocr/downloads/list>`_. If, for
|
||||
example, you'd like to build v3.02 you would use the following link:
|
||||
|
||||
http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02-vs2008.zip
|
||||
|
||||
Unpack the file to `C:\\BuildFolder`
|
||||
|
||||
You would now have the following directory structure::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
tesseract-3.02\
|
||||
vs2008\
|
||||
ambiguous_words\
|
||||
APITest\
|
||||
APIExamples\
|
||||
classifier_tester\
|
||||
cntraining\
|
||||
combine_tessdata\
|
||||
dawg2wordlist\
|
||||
doc\
|
||||
include\
|
||||
libtesseract\
|
||||
libtesseract.vcproj
|
||||
mftraining\
|
||||
port\
|
||||
shapeclustering\
|
||||
sphinx\
|
||||
tesseract\
|
||||
tesseract.vcproj
|
||||
unicharset_extractor\
|
||||
wordlist2dawg\
|
||||
|
||||
tesseract.sln
|
||||
tesshelper.py
|
||||
|
||||
4. Download the |Tesseractocr| source files for the same version as the
|
||||
VS2008 files you just unpacked. In this case, the proper link would
|
||||
be:
|
||||
|
||||
http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.tar.gz
|
||||
|
||||
Unpack the file to `C:\\BuildFolder`
|
||||
|
||||
This will add a bunch of directories to your already existing
|
||||
`C:\\BuildFolder\\tesseract-3.0x` directory. You should now have (for
|
||||
v3.02)::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
lib\
|
||||
tesseract-3.02\
|
||||
api\
|
||||
ccmain\
|
||||
ccstruct\
|
||||
ccutil\
|
||||
classify\
|
||||
config\
|
||||
contrib\
|
||||
cube\
|
||||
cutil\
|
||||
dict\
|
||||
doc\
|
||||
image\
|
||||
java\
|
||||
image\
|
||||
neural_networks\
|
||||
tessdata\
|
||||
testing\
|
||||
textord\
|
||||
training\
|
||||
viewer\
|
||||
vs2008\
|
||||
wordrec\
|
||||
|
||||
.. _copying-headers:
|
||||
|
||||
If you are planning on writing applications that link with
|
||||
|Tesseractocr|, and you don't want to add all the `tesseract-3.0x`
|
||||
directories to your project's list of ``include`` directories, then do
|
||||
this additional step:
|
||||
|
||||
5. Copy all the required headers to the "public" include folder.
|
||||
|
||||
If you already have a `C:\\BuildFolder\\include\\tesseract`
|
||||
directory you should delete it in case some of the files have been
|
||||
removed.
|
||||
|
||||
Then use the python `tess-helper.py` script to copy (possibly updated
|
||||
versions of) the required headers by doing::
|
||||
|
||||
cd C:\BuildFolder\tesseract-3.02\vs2008
|
||||
python tesshelper.py .. copy ..\..\include
|
||||
|
||||
See :ref:`tesshelper` for more details.
|
||||
|
||||
You are now ready to :doc:`build <building>` |Tesseractocr| using Visual
|
||||
Studio 2008.
|
||||
|
||||
|
||||
.. _using-latest-sources:
|
||||
|
||||
Using the latest |Tesseractocr| sources
|
||||
=======================================
|
||||
|
||||
If you'd like to try the absolute latest version of |Tesseractocr|,
|
||||
here's how to download the source files from its SVN repository:
|
||||
|
||||
1. Follow Steps 1 and 2 :ref:`above <directory-setup>`.
|
||||
|
||||
#. `Checkout <http://code.google.com/p/tesseract-ocr/source/checkout>`_
|
||||
the |Tesseractocr| sources to a directory on your computer. This
|
||||
directory should :bi:`not` be `C:\\BuildFolder`!
|
||||
|
||||
If you are unfamiliar with `SVN <http://subversion.apache.org/>`_,
|
||||
the easiest way to do this is to first download and install
|
||||
`TortoiseSVN <http://tortoisesvn.net/>`_ and then:
|
||||
|
||||
a. Right-click the (empty) directory where you want the working copy
|
||||
and choose :menuselection:`SVN Chec&kout...` from
|
||||
the pop-up menu.
|
||||
|
||||
#. Enter ``http://tesseract-ocr.googlecode.com/svn/trunk/`` for
|
||||
:guilabel:`&URL of repository`. You can keep all the other
|
||||
settings at their defaults.
|
||||
|
||||
.. image:: images/tortoisesvn_checkout.png
|
||||
:align: center
|
||||
:alt: TortoiseSVN Checkout Dialog Box
|
||||
|
||||
#. Click the :guilabel:`&OK` button to commence downloading the
|
||||
|Tesseractocr| sources to your computer. This might take a while as
|
||||
the language data in the `tessdata` directory is quite large. As
|
||||
of February 2012, about 335MB needs to be transferred for the
|
||||
initial checkout. The total size of the resulting working copy is
|
||||
about 1.2GB.
|
||||
|
||||
#. Keeping your working copy up to date after this is as simple as
|
||||
right-clicking its directory and choosing :menuselection:`SVN
|
||||
&Update`. Unlike the initial checkout, this will usually finish
|
||||
very quickly.
|
||||
|
||||
#. Copy the :bi:`contents` of your working directory, except for the
|
||||
`tessdata` directory, to `C:\\BuildFolder\\tesseract-3.0x`, where
|
||||
``x`` should probably be the latest stable release + ``alpha``,
|
||||
``beta``, etc.
|
||||
|
||||
#. Optionally, follow Step 5 from :ref:`above <copying-headers>`.
|
||||
|
||||
#. You'll probably want to set an environment varible named
|
||||
``TESSDATA_PREFIX`` to point at your working copy directory (since
|
||||
that now contains the latest `tessdata` directory).
|
||||
|
||||
#. If someone hasn't already done so, you have to proceed to
|
||||
:ref:`updating-vs2008-directory`. You can skip all the steps that
|
||||
relate to updating the version number. Otherwise, depending on how
|
||||
many changes have been made since the last stable release, you may
|
||||
have little or no work to do.
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,252 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==================
|
||||
Handy free tools
|
||||
==================
|
||||
|
||||
`TortoiseSVN <http://tortoisesvn.net/>`_
|
||||
----------------------------------------
|
||||
|
||||
The |Tesseractocr| source lives in an SVN repository at `Google Code
|
||||
<http://code.google.com/p/tesseract-ocr/source/checkout>`_, so to
|
||||
:ref:`build the latest versions <using-latest-sources>` you'll need to
|
||||
know SVN. For newcomers (or not), TortoiseSVN (http://tortoisesvn.net/)
|
||||
is a great alternative to the SVN command line interface.
|
||||
|
||||
"TortoiseSVN is an easy-to-use SCM / source control software for
|
||||
Microsoft Windows and possibly the best standalone Apache Subversion
|
||||
client there is. It is implemented as a Windows shell extension, which
|
||||
makes it integrate seamlessly into the Windows explorer. Since it's not
|
||||
an integration for a specific IDE you can use it with whatever
|
||||
development tools you like."
|
||||
|
||||
|
||||
`JP Software TCC/LE <http://jpsoft.com/tccle_cmd_replacement.html>`_
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Instead of using Windows' plain old Command Prompt window --- and less
|
||||
intimidating than using the bash shell from `cygwin
|
||||
<http://cygwin.com/>`_ or `MSYS <http://mingw.org/wiki/msys>`_ --- the
|
||||
"TCC/LE - Windows CMD Replacement Command Console" by JP Software is
|
||||
definitely worth trying. It is available at
|
||||
http://jpsoft.com/tccle_cmd_replacement.html.
|
||||
|
||||
For example, to look for all the settable options in |Tesseractocr|,
|
||||
try::
|
||||
|
||||
C:\BuildFolder\tesseract-3.02\
|
||||
ffind /s/v/c/t"_MEMBER" *.cpp | list/s
|
||||
|
||||
and you'll get something that looks like this in the `list` viewer::
|
||||
|
||||
---- C:\BuildFolder\tesseract-3.02\ccmain\tesseractclass.cpp
|
||||
: BOOL_MEMBER(tessedit_resegment_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_resegment_from_line_boxes, false,
|
||||
BOOL_MEMBER(tessedit_train_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_make_boxes_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_dump_pageseg_images, false,
|
||||
...
|
||||
double_MEMBER(segsearch_max_char_wh_ratio, 2.0,
|
||||
double_MEMBER(segsearch_max_fixed_pitch_char_wh_ratio, 2.0,
|
||||
BOOL_MEMBER(save_alt_choices, false,
|
||||
|
||||
413 lines in 7 files
|
||||
|
||||
(Press the :kbd:`Escape` key to exit the `list` viewer).
|
||||
|
||||
The equivalent(?) Linux incantation, copied and slightly modified from
|
||||
the grep info, is::
|
||||
|
||||
find . -name '*.cpp' -print0 | xargs -0r grep -H '_MEMBER' | less
|
||||
|
||||
Note: You can also do this directly in Visual Studio 2008, by choosing
|
||||
:menuselection:`&Edit --> &Find and Replace --> F&ind in Files`
|
||||
(:kbd:`Ctrl+Shift+F`), so maybe this wasn't the best example:
|
||||
|
||||
.. image:: images/find_in_files.png
|
||||
:align: center
|
||||
:alt: Visual Studio 2008 Find in Files Dialog
|
||||
|
||||
|
||||
`Cygwin <http://cygwin.com/>`_
|
||||
------------------------------
|
||||
|
||||
"`Cygwin <http://cygwin.com/>`_ is a collection of tools which provide a
|
||||
Linux look and feel environment for Windows."
|
||||
|
||||
|Leptonica| actually still requires a few unix utilities (like `rm`,
|
||||
`diff`, `sleep`) for some operations and might silently fail if it they
|
||||
not present (as of v1.68). The easiest way to deal with this is to
|
||||
`install Cygwin
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-cygwin.html>`_
|
||||
or MSYS (see the next section).
|
||||
|
||||
`MSYS <http://mingw.org/wiki/msys>`_
|
||||
------------------------------------
|
||||
|
||||
"`MSYS <http://mingw.org/wiki/msys>`_ is a collection of GNU utilities
|
||||
such as bash, make, gawk and grep to allow building of applications and
|
||||
programs which depend on traditionally UNIX tools to be present. It is
|
||||
intended to supplement MinGW and the deficiencies of the cmd shell."
|
||||
|
||||
|
||||
WinDiff
|
||||
-------
|
||||
|
||||
An important phase of testing `tesseract` is checking how its output
|
||||
compares to previous runs (or ground-truth files). A visual diff program
|
||||
can make that easier.
|
||||
|
||||
Microsoft's WinDiff doesn't seem to come with Visual Studio
|
||||
anymore. However it can still be downloaded from `Grig Software
|
||||
<http://www.grigsoft.com/download-windiff.htm>`_ (without having to get
|
||||
all the other stuff in the `Windows XP Service Pack 2 Support Tools
|
||||
<http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=18546>`_.
|
||||
|
||||
Other options are `KDiff3 <http://kdiff3.sourceforge.net/>`_ and
|
||||
`ExamDiff <http://www.prestosoft.com/edp_examdiff.asp>`_ (`ExamDiff Pro
|
||||
<http://www.prestosoft.com/edp_examdiffpro.asp>`_ is also recommended
|
||||
but it's not free).
|
||||
|
||||
KDiff3 doesn't seem to correctly auto-detect UTF-8 encodings so choose
|
||||
:menuselection:`&Settings --> &Configure KDiff3...` from the menubar and
|
||||
set the :guilabel:`Regional Settings` tab as follows:
|
||||
|
||||
.. image:: images/kdif3_settings.png
|
||||
:align: center
|
||||
:alt: KDiff3 Regional Settings
|
||||
|
||||
Also on the :guilabel:`Integration` tab, make sure that :guilabel:`Quit
|
||||
also via Escape key` is turned on (checked). Since IrfanView also quits
|
||||
when you press the :kbd:`Esc` key, this just makes it easy to dismiss
|
||||
both applications with the same key.
|
||||
|
||||
Here is KDiff3 showing the (slight) difference in OCR results after
|
||||
deskewing a grayscale image:
|
||||
|
||||
.. figure:: images/sample_diff.png
|
||||
:height: 512
|
||||
:align: center
|
||||
:alt: Diff in OCR after deskewing image
|
||||
:target: _images/sample_diff.png
|
||||
|
||||
`Click for larger image <_images/sample_diff.png>`__
|
||||
|
||||
|
||||
`IrfanView <http://www.irfanview.com/>`_
|
||||
----------------------------------------
|
||||
|
||||
You need some program to view the images you are trying to OCR and since
|
||||
|Leptonica| uses IrfanView (http://www.irfanview.com/) to `automatically
|
||||
display images <http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-irfanview.html>`_,
|
||||
you might as well use it also.
|
||||
|
||||
"IrfanView is a very fast, small, compact and innovative FREEWARE (for
|
||||
non-commercial use) graphic viewer for Windows 9x, ME, NT, 2000, XP,
|
||||
Vista, Windows 7."
|
||||
|
||||
Pressing the :kbd:`I` key while viewing an image with IrfanView, will
|
||||
bring up a dialog box that shows most of its important properties (like
|
||||
bits/pixel and DPI).
|
||||
|
||||
|
||||
|
||||
`Aware Systems AsTiffTagViewer <http://www.awaresystems.be/imaging/tiff/astifftagviewer.html>`_
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
This utility, available at
|
||||
http://www.awaresystems.be/imaging/tiff/astifftagviewer.html, let's you
|
||||
easily determine TIFF image file properties.
|
||||
|
||||
"Whenever a customer reports your software doesn't handle this or that
|
||||
particular TIFF, use AsTiffTagViewer and discover why."
|
||||
|
||||
|
||||
`Dependency Walker <http://dependencywalker.com/>`_
|
||||
---------------------------------------------------
|
||||
|
||||
If you're having problems with missing module runtime errors, the
|
||||
Dependency Walker (http://dependencywalker.com/) usually can help track
|
||||
down the problem.
|
||||
|
||||
"Dependency Walker is also very useful for troubleshooting system errors
|
||||
related to loading and executing modules. Dependency Walker detects many
|
||||
common application problems such as missing modules, invalid modules,
|
||||
import/export mismatches, circular dependency errors, mismatched machine
|
||||
types of modules, and module initialization failures."
|
||||
|
||||
You probably want the 32-bit version even if you are running on a
|
||||
Windows 64-bit platform, because the current VS2008 Solution for
|
||||
|Tesseractocr| by default builds a 32-bit app. From the `FAQ
|
||||
<http://dependencywalker.com/faq.html>`_
|
||||
|
||||
"There are 32-bit and 64-bit versions Dependency Walker. All versions
|
||||
are capable or opening 32-bit and 64-bit modules. However, there are
|
||||
major advantages to using the 32-bit Dependency Walker to process 32-bit
|
||||
modules and the 64-bit Dependency Walker to process 64-bit modules.
|
||||
This is especially true when running on a 64-bit version of Windows,
|
||||
which allows execution of both 32-bit and 64-bit programs. The 32-bit
|
||||
subsystem on 64-bit Windows (known as "WOW64") has its own private
|
||||
registry, "AppPaths", "KnownDlls", system folders, and manifest
|
||||
processing. Only the 32-bit version of Dependency Walker can access
|
||||
this 32-bit environment, which is needed to accurately process a 32-bit
|
||||
module. Likewise, only the 64-bit version of Dependency Walker can
|
||||
fully access the 64-bit environment, so it should always be used for
|
||||
processing 64-bit modules."
|
||||
|
||||
.. figure:: images/dependency_walker.png
|
||||
:height: 640
|
||||
:align: center
|
||||
:alt: Dependency Walker view of tesseract-dlld.exe
|
||||
:target: _images/dependency_walker.png
|
||||
|
||||
`Click for larger image <_images/dependency_walker.png>`__
|
||||
|
||||
The above image shows Dependency Walker used on
|
||||
`tesseract-dlld.exe`. The panes show the `DLL`\ s that it is dependent
|
||||
on, the methods it actually uses from `libtesseract302d.dll`, and all
|
||||
the exported methods from `libtesseract302d.dll`. Using this it's easy
|
||||
to see that only the ``TessBaseAPI`` and ``STRING`` classes are exported
|
||||
as mentioned in :doc:`programming`.
|
||||
|
||||
`Sysinternals Process Explorer <http://technet.microsoft.com/en-us/sysinternals/bb896653>`_
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
Another essential program to help figure out what your program is doing
|
||||
is Process Explorer
|
||||
(http://technet.microsoft.com/en-us/sysinternals/bb896653).
|
||||
|
||||
"The unique capabilities of Process Explorer make it useful for tracking
|
||||
down DLL-version problems or handle leaks, and provide insight into the
|
||||
way Windows and applications work."
|
||||
|
||||
|
||||
`VMware Player <http://www.vmware.com/products/player/>`_
|
||||
---------------------------------------------------------
|
||||
|
||||
VMware Player (http://www.vmware.com/products/player/) can be used to
|
||||
install, for example, `Ubuntu 11.10 <http://www.ubuntu.com/>`_ in a
|
||||
virtual machine on Windows and see how the other half lives. It also
|
||||
helps when trying to figure out if the Windows version of `tesseract`
|
||||
acts the same way as the "original" version.
|
||||
|
||||
"VMware Player is the easiest way to run multiple operating systems at
|
||||
the same time on your PC. With its user-friendly interface, VMware
|
||||
Player makes it effortless for anyone to try out Windows 8 developer
|
||||
release, Windows 7, Chrome OS or the latest Linux releases, or create
|
||||
isolated virtual machines to safely test new software and surf the Web."
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,169 +0,0 @@
|
||||
:version: $RCSfile: versions.rst,v $ $Revision: 6c29e8896e5c $ $Date: 2011/03/14 21:50:44 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
===============
|
||||
Version Notes
|
||||
===============
|
||||
|
||||
3.02 -- February ??, 2012
|
||||
=========================
|
||||
|
||||
+ Created a completely new Visual Studio 2008 solution from scratch.
|
||||
|
||||
+ Added 64 new source files and removed the following deleted files
|
||||
(relative to v3.01):
|
||||
|
||||
+ ccutil\memblk.cpp
|
||||
+ ccutil\memblk.h
|
||||
+ ccutil\memryerr.h
|
||||
+ wordrec\pieces.h
|
||||
+ wordrec\tally.cpp
|
||||
+ wordrec\tally.h
|
||||
|
||||
+ Created :guilabel:`LIB_Release`, :guilabel:`LIB_Debug`,
|
||||
:guilabel:`DLL_Release`, and :guilabel:`DLL_Debug` build
|
||||
configurations.
|
||||
|
||||
+ Created a single `libtesseract` library and removed generation of the
|
||||
twelve sub-libraries.
|
||||
|
||||
+ Used references to `leptonica_versionnumbers.vsprops` and
|
||||
`tesseract_versionnumbers.vsprops` Property Sheets, which define
|
||||
version number "user macros", in all Visual Studio Projects. These are
|
||||
also copied to `C:\\BuildFolder\\include`, so you can refer to them in
|
||||
your own projects. By using the new ``*_VERSION`` macros, you'll be
|
||||
isolated from worrying about version number changes in the library
|
||||
filenames.
|
||||
|
||||
See :ref:`APITest's <APITest>` :ref:`LIB_Release <apitest-lib-release>` Linker
|
||||
:guilabel:`Additional Dependencies` settings for an example of what
|
||||
this looks like in practice.
|
||||
|
||||
See |Leptonica|\ ’s explanation `About version numbers in library
|
||||
filenames
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/downloading-binaries.html#about-version-numbers>`_
|
||||
for more details.
|
||||
|
||||
+ Added a :ref:`Version Resource <version-resource>` to all DLLs and
|
||||
applications.
|
||||
|
||||
+ Removed inclusion of the |Leptonica| libraries. They now have to be
|
||||
:ref:`downloaded separately <download-leptonica>`.
|
||||
|
||||
+ Changed to a :ref:`Build directory structure <directory-setup>` that
|
||||
is compatible with |Leptonica| and allows the building of
|
||||
|Tesseractocr|\ -based applications using only the `include` and `lib`
|
||||
directories.
|
||||
|
||||
+ The `libtesseract` libraries are now named as follows:
|
||||
|
||||
static libraries:
|
||||
|
||||
+ libtesseract302-static.lib
|
||||
|
||||
+ libtesseract302-static-debug.lib
|
||||
|
||||
DLLs:
|
||||
|
||||
+ libtesseract302.lib (import library)
|
||||
|
||||
+ libtesseract302.dll
|
||||
|
||||
+ libtesseract302d.lib (import library)
|
||||
|
||||
+ libtesseract302d.dll
|
||||
|
||||
+ Used compiler and linker settings based on the |Leptonica| `VS2008
|
||||
Developer package
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/index.html>`_.
|
||||
|
||||
+ Removed all preprocessor defines of ``__MSW32__`` which is no longer
|
||||
needed.
|
||||
|
||||
+ Removed `vs2008\include\stdint.h` which is no longer required to build
|
||||
|liblept|.
|
||||
|
||||
+ Removed `vs2008\include\inttypes.h` which isn't needed to build
|
||||
|liblept|.
|
||||
|
||||
+ Turned off the following compiler warnings::
|
||||
|
||||
/wd4005: 'snprintf' : macro redefinition
|
||||
|
||||
/wd4018 'expression' : signed/unsigned mismatch
|
||||
|
||||
/wd4099 type name first seen using 'class' now seen using 'struct'
|
||||
|
||||
/wd4244 conversion from 'double' to 'float', possible loss of data
|
||||
|
||||
/wd4267 conversion from 'size_t' to 'type', possible loss of data
|
||||
|
||||
/wd4305 truncation from 'type1' to 'type2'
|
||||
|
||||
/wd4355 'this' : used in base member initializer list
|
||||
|
||||
/wd4566 character represented by universal-character-name x cannot
|
||||
be represented in the current code page
|
||||
|
||||
/wd4800 forcing value to bool 'true' or 'false' (performance warning)
|
||||
|
||||
/wd4996 'function': was declared deprecated
|
||||
|
||||
|
||||
+ Used the "C7 Compatible" Debug Information (/Z7) compiler switch,
|
||||
which puts the debugging information in the .obj files. That way we
|
||||
don't have to worry about also supplying `.pdb` files. See `/Z7,
|
||||
/Zi, /ZI (Debug Information Format)
|
||||
<http://msdn.microsoft.com/en-us/library/958x11bc(VS.90).aspx>`_ for
|
||||
more information.
|
||||
|
||||
+ Added Projects for the following new :ref:`training applications
|
||||
<training-applications>`:
|
||||
|
||||
+ ambiguous_words
|
||||
|
||||
+ classifier_tester
|
||||
|
||||
+ dawg2wordlist
|
||||
|
||||
+ shapeclustering
|
||||
|
||||
+ Moved `mathfix.h` from `vs2008\\include` to the `vs2008\\port`
|
||||
directory.
|
||||
|
||||
+ Removed Visual Studio 2010 support. See :doc:`vs2010-notes` for the
|
||||
rationale.
|
||||
|
||||
+ Created a python script called :ref:`tesshelper.py <tesshelper>`, that
|
||||
eases some maintenance tasks related to releasing future VS2008
|
||||
Solutions.
|
||||
|
||||
+ The list of "public" header files that are required to build
|
||||
"external" applications is now limited to the following 13 files::
|
||||
|
||||
api\apitypes.h
|
||||
api\baseapi.h
|
||||
ccmain\thresholder.h
|
||||
ccstruct\publictypes.h
|
||||
ccutil\errcode.h
|
||||
ccutil\fileerr.h
|
||||
ccutil\host.h
|
||||
ccutil\memry.h
|
||||
ccutil\platform.h
|
||||
ccutil\serialis.h
|
||||
ccutil\strngs.h
|
||||
ccutil\tesscallback.h
|
||||
ccutil\unichar.h
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,24 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==========================
|
||||
Using Visual Studio 2010
|
||||
==========================
|
||||
|
||||
There currently isn't an analogous `VS2010` sub-directory for
|
||||
|Tesseractocr|. However, you should be able to adapt the instructions at
|
||||
http://tpgit.github.com/UnOfficialLeptDocs/vs2008/vs2010-notes.html to
|
||||
convert the VS2008 solution.
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
BIN
vs2008/doc/_static/ajax-loader.gif
vendored
Before Width: | Height: | Size: 673 B |
540
vs2008/doc/_static/basic.css
vendored
@ -1,540 +0,0 @@
|
||||
/*
|
||||
* basic.css
|
||||
* ~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- basic theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* -- relbar ---------------------------------------------------------------- */
|
||||
|
||||
div.related {
|
||||
width: 100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.related h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.related ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 10px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.related li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.related li.right {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
/* -- sidebar --------------------------------------------------------------- */
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
float: left;
|
||||
width: 230px;
|
||||
margin-left: -100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul,
|
||||
div.sphinxsidebar ul.want-points {
|
||||
margin-left: 20px;
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid #98dbcc;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input[type="text"] {
|
||||
width: 170px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input[type="submit"] {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li div.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- index page ------------------------------------------------------------ */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* -- general index --------------------------------------------------------- */
|
||||
|
||||
table.indextable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable dl, table.indextable dd {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.modindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
div.genindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
/* -- general body styles --------------------------------------------------- */
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left {
|
||||
clear: left;
|
||||
float: left;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right {
|
||||
clear: right;
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* -- sidebars -------------------------------------------------------------- */
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em;
|
||||
border: 1px solid #ddb;
|
||||
padding: 7px 7px 0 7px;
|
||||
background-color: #ffe;
|
||||
width: 40%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
p.sidebar-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- topics ---------------------------------------------------------------- */
|
||||
|
||||
div.topic {
|
||||
border: 1px solid #ccc;
|
||||
padding: 7px 7px 0 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* -- admonitions ----------------------------------------------------------- */
|
||||
|
||||
div.admonition {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.admonition dl {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
/* -- tables ---------------------------------------------------------------- */
|
||||
|
||||
table.docutils {
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 1px 8px 1px 5px;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
table.field-list td, table.field-list th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
table.footnote td, table.footnote th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
table.citation td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* -- other body styles ----------------------------------------------------- */
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha;
|
||||
}
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha;
|
||||
}
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman;
|
||||
}
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
dd p {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
dt:target, .highlighted {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.refcount {
|
||||
color: #060;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
.footnote:target {
|
||||
background-color: #ffa;
|
||||
}
|
||||
|
||||
.line-block {
|
||||
display: block;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.line-block .line-block {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
.guilabel, .menuselection {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
.accelerator {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.classifier {
|
||||
font-style: oblique;
|
||||
}
|
||||
|
||||
abbr, acronym {
|
||||
border-bottom: dotted 1px;
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
/* -- code displays --------------------------------------------------------- */
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
padding: 5px 0px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
}
|
||||
|
||||
tt.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
tt.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
tt.xref, a tt {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.viewcode-link {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
margin: -1px -10px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/* -- math display ---------------------------------------------------------- */
|
||||
|
||||
img.math {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.body div.math p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.eqno {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* -- printout stylesheet --------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0 !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
BIN
vs2008/doc/_static/comment-bright.png
vendored
Before Width: | Height: | Size: 3.4 KiB |
BIN
vs2008/doc/_static/comment-close.png
vendored
Before Width: | Height: | Size: 3.5 KiB |
BIN
vs2008/doc/_static/comment.png
vendored
Before Width: | Height: | Size: 3.4 KiB |
276
vs2008/doc/_static/default.css
vendored
@ -1,276 +0,0 @@
|
||||
/*
|
||||
* default.css_t
|
||||
* ~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- default theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
@import url("basic.css");
|
||||
|
||||
/* -- page layout ----------------------------------------------------------- */
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
background-color: #11303d;
|
||||
color: #000;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.document {
|
||||
background-color: #1c4e63;
|
||||
}
|
||||
|
||||
div.documentwrapper {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.bodywrapper {
|
||||
margin: 0 0 0 230px;
|
||||
}
|
||||
|
||||
div.body {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
padding: 0 20px 30px 20px;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
color: #ffffff;
|
||||
width: 100%;
|
||||
padding: 9px 0 9px 0;
|
||||
text-align: center;
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
div.footer a {
|
||||
color: #ffffff;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.related {
|
||||
background-color: #133f52;
|
||||
line-height: 30px;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.related a {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
}
|
||||
|
||||
div.sphinxsidebar h3 {
|
||||
font-family: 'Trebuchet MS', sans-serif;
|
||||
color: #ffffff;
|
||||
font-size: 1.4em;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar h3 a {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.sphinxsidebar h4 {
|
||||
font-family: 'Trebuchet MS', sans-serif;
|
||||
color: #ffffff;
|
||||
font-size: 1.3em;
|
||||
font-weight: normal;
|
||||
margin: 5px 0 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar p {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.sphinxsidebar p.topless {
|
||||
margin: 5px 10px 10px 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
margin: 10px;
|
||||
padding: 0;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
div.sphinxsidebar a {
|
||||
color: #98dbcc;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid #98dbcc;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
|
||||
/* for collapsible sidebar */
|
||||
div#sidebarbutton {
|
||||
background-color: #3c6e83;
|
||||
}
|
||||
|
||||
|
||||
/* -- hyperlink styles ------------------------------------------------------ */
|
||||
|
||||
a {
|
||||
color: #355f7c;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #355f7c;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
a.external {
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dashed #355f7c;
|
||||
}
|
||||
|
||||
a.external:hover {
|
||||
text-decoration: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
a.external:visited {
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dashed #355f7c;
|
||||
}
|
||||
|
||||
|
||||
/* -- body styles ----------------------------------------------------------- */
|
||||
|
||||
div.body h1,
|
||||
div.body h2,
|
||||
div.body h3,
|
||||
div.body h4,
|
||||
div.body h5,
|
||||
div.body h6 {
|
||||
font-family: 'Trebuchet MS', sans-serif;
|
||||
background-color: #f2f2f2;
|
||||
font-weight: normal;
|
||||
color: #20435c;
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin: 20px -20px 10px -20px;
|
||||
padding: 3px 0 3px 10px;
|
||||
}
|
||||
|
||||
div.body h1 { margin-top: 0; font-size: 200%; }
|
||||
div.body h2 { font-size: 160%; }
|
||||
div.body h3 { font-size: 140%; }
|
||||
div.body h4 { font-size: 120%; }
|
||||
div.body h5 { font-size: 110%; }
|
||||
div.body h6 { font-size: 100%; }
|
||||
|
||||
a.headerlink {
|
||||
color: #c60f0f;
|
||||
font-size: 0.8em;
|
||||
padding: 0 4px 0 4px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.headerlink:hover {
|
||||
background-color: #c60f0f;
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.body p, div.body dd, div.body li {
|
||||
text-align: justify;
|
||||
line-height: 130%;
|
||||
}
|
||||
|
||||
div.admonition p.admonition-title + p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.admonition p {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.admonition pre {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.admonition ul, div.admonition ol {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.note {
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
div.seealso {
|
||||
background-color: #ffc;
|
||||
border: 1px solid #ff6;
|
||||
}
|
||||
|
||||
div.topic {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
div.warning {
|
||||
background-color: #ffe4e4;
|
||||
border: 1px solid #f66;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
p.admonition-title:after {
|
||||
content: ":";
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 5px;
|
||||
background-color: #eeffcc;
|
||||
color: #333333;
|
||||
line-height: 120%;
|
||||
border: 1px solid #ac9;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
tt {
|
||||
background-color: #ecf0f3;
|
||||
padding: 0 1px 0 1px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #ede;
|
||||
}
|
||||
|
||||
.warning tt {
|
||||
background: #efc2c2;
|
||||
}
|
||||
|
||||
.note tt {
|
||||
background: #d6d6d6;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
background-color: #f4debf;
|
||||
border-top: 1px solid #ac9;
|
||||
border-bottom: 1px solid #ac9;
|
||||
}
|
247
vs2008/doc/_static/doctools.js
vendored
@ -1,247 +0,0 @@
|
||||
/*
|
||||
* doctools.js
|
||||
* ~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilities for all documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* select a different prefix for underscore
|
||||
*/
|
||||
$u = _.noConflict();
|
||||
|
||||
/**
|
||||
* make the code below compatible with browsers without
|
||||
* an installed firebug like debugger
|
||||
if (!window.console || !console.firebug) {
|
||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
|
||||
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
|
||||
"profile", "profileEnd"];
|
||||
window.console = {};
|
||||
for (var i = 0; i < names.length; ++i)
|
||||
window.console[names[i]] = function() {};
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* small helper function to urldecode strings
|
||||
*/
|
||||
jQuery.urldecode = function(x) {
|
||||
return decodeURIComponent(x).replace(/\+/g, ' ');
|
||||
}
|
||||
|
||||
/**
|
||||
* small helper function to urlencode strings
|
||||
*/
|
||||
jQuery.urlencode = encodeURIComponent;
|
||||
|
||||
/**
|
||||
* This function returns the parsed url parameters of the
|
||||
* current request. Multiple values per key are supported,
|
||||
* it will always return arrays of strings for the value parts.
|
||||
*/
|
||||
jQuery.getQueryParameters = function(s) {
|
||||
if (typeof s == 'undefined')
|
||||
s = document.location.search;
|
||||
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
||||
var result = {};
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var tmp = parts[i].split('=', 2);
|
||||
var key = jQuery.urldecode(tmp[0]);
|
||||
var value = jQuery.urldecode(tmp[1]);
|
||||
if (key in result)
|
||||
result[key].push(value);
|
||||
else
|
||||
result[key] = [value];
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* small function to check if an array contains
|
||||
* a given item.
|
||||
*/
|
||||
jQuery.contains = function(arr, item) {
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i] == item)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* highlight a given string on a jquery object by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
jQuery.fn.highlightText = function(text, className) {
|
||||
function highlight(node) {
|
||||
if (node.nodeType == 3) {
|
||||
var val = node.nodeValue;
|
||||
var pos = val.toLowerCase().indexOf(text);
|
||||
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
|
||||
var span = document.createElement("span");
|
||||
span.className = className;
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
||||
document.createTextNode(val.substr(pos + text.length)),
|
||||
node.nextSibling));
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
}
|
||||
}
|
||||
else if (!jQuery(node).is("button, select, textarea")) {
|
||||
jQuery.each(node.childNodes, function() {
|
||||
highlight(this);
|
||||
});
|
||||
}
|
||||
}
|
||||
return this.each(function() {
|
||||
highlight(this);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
var Documentation = {
|
||||
|
||||
init : function() {
|
||||
this.fixFirefoxAnchorBug();
|
||||
this.highlightSearchWords();
|
||||
this.initIndexTable();
|
||||
},
|
||||
|
||||
/**
|
||||
* i18n support
|
||||
*/
|
||||
TRANSLATIONS : {},
|
||||
PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
|
||||
LOCALE : 'unknown',
|
||||
|
||||
// gettext and ngettext don't access this so that the functions
|
||||
// can safely bound to a different name (_ = Documentation.gettext)
|
||||
gettext : function(string) {
|
||||
var translated = Documentation.TRANSLATIONS[string];
|
||||
if (typeof translated == 'undefined')
|
||||
return string;
|
||||
return (typeof translated == 'string') ? translated : translated[0];
|
||||
},
|
||||
|
||||
ngettext : function(singular, plural, n) {
|
||||
var translated = Documentation.TRANSLATIONS[singular];
|
||||
if (typeof translated == 'undefined')
|
||||
return (n == 1) ? singular : plural;
|
||||
return translated[Documentation.PLURALEXPR(n)];
|
||||
},
|
||||
|
||||
addTranslations : function(catalog) {
|
||||
for (var key in catalog.messages)
|
||||
this.TRANSLATIONS[key] = catalog.messages[key];
|
||||
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
|
||||
this.LOCALE = catalog.locale;
|
||||
},
|
||||
|
||||
/**
|
||||
* add context elements like header anchor links
|
||||
*/
|
||||
addContextElements : function() {
|
||||
$('div[id] > :header:first').each(function() {
|
||||
$('<a class="headerlink">\u00B6</a>').
|
||||
attr('href', '#' + this.id).
|
||||
attr('title', _('Permalink to this headline')).
|
||||
appendTo(this);
|
||||
});
|
||||
$('dt[id]').each(function() {
|
||||
$('<a class="headerlink">\u00B6</a>').
|
||||
attr('href', '#' + this.id).
|
||||
attr('title', _('Permalink to this definition')).
|
||||
appendTo(this);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* workaround a firefox stupidity
|
||||
*/
|
||||
fixFirefoxAnchorBug : function() {
|
||||
if (document.location.hash && $.browser.mozilla)
|
||||
window.setTimeout(function() {
|
||||
document.location.href += '';
|
||||
}, 10);
|
||||
},
|
||||
|
||||
/**
|
||||
* highlight the search words provided in the url in the text
|
||||
*/
|
||||
highlightSearchWords : function() {
|
||||
var params = $.getQueryParameters();
|
||||
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
|
||||
if (terms.length) {
|
||||
var body = $('div.body');
|
||||
window.setTimeout(function() {
|
||||
$.each(terms, function() {
|
||||
body.highlightText(this.toLowerCase(), 'highlighted');
|
||||
});
|
||||
}, 10);
|
||||
$('<p class="highlight-link"><a href="javascript:Documentation.' +
|
||||
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
|
||||
.appendTo($('#searchbox'));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* init the domain index toggle buttons
|
||||
*/
|
||||
initIndexTable : function() {
|
||||
var togglers = $('img.toggler').click(function() {
|
||||
var src = $(this).attr('src');
|
||||
var idnum = $(this).attr('id').substr(7);
|
||||
$('tr.cg-' + idnum).toggle();
|
||||
if (src.substr(-9) == 'minus.png')
|
||||
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
|
||||
else
|
||||
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
|
||||
}).css('display', '');
|
||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
|
||||
togglers.click();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to hide the search marks again
|
||||
*/
|
||||
hideSearchWords : function() {
|
||||
$('#searchbox .highlight-link').fadeOut(300);
|
||||
$('span.highlighted').removeClass('highlighted');
|
||||
},
|
||||
|
||||
/**
|
||||
* make the url absolute
|
||||
*/
|
||||
makeURL : function(relativeURL) {
|
||||
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
|
||||
},
|
||||
|
||||
/**
|
||||
* get the current relative url
|
||||
*/
|
||||
getCurrentURL : function() {
|
||||
var path = document.location.pathname;
|
||||
var parts = path.split(/\//);
|
||||
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
|
||||
if (this == '..')
|
||||
parts.pop();
|
||||
});
|
||||
var url = parts.join('/');
|
||||
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
|
||||
}
|
||||
};
|
||||
|
||||
// quick alias for translations
|
||||
_ = Documentation.gettext;
|
||||
|
||||
$(document).ready(function() {
|
||||
Documentation.init();
|
||||
});
|
BIN
vs2008/doc/_static/down-pressed.png
vendored
Before Width: | Height: | Size: 368 B |
BIN
vs2008/doc/_static/down.png
vendored
Before Width: | Height: | Size: 363 B |
BIN
vs2008/doc/_static/file.png
vendored
Before Width: | Height: | Size: 392 B |
154
vs2008/doc/_static/jquery.js
vendored
@ -1,154 +0,0 @@
|
||||
/*!
|
||||
* jQuery JavaScript Library v1.4.2
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2010, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
* http://sizzlejs.com/
|
||||
* Copyright 2010, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Sat Feb 13 22:33:48 2010 -0500
|
||||
*/
|
||||
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
|
||||
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
|
||||
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
|
||||
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
|
||||
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
|
||||
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
|
||||
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
|
||||
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
|
||||
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
|
||||
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
|
||||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
|
||||
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
|
||||
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
|
||||
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
|
||||
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
|
||||
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
|
||||
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
|
||||
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
||||
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
|
||||
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
|
||||
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
|
||||
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
|
||||
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
|
||||
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
|
||||
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
|
||||
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
|
||||
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
|
||||
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
|
||||
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
|
||||
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
|
||||
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
|
||||
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
||||
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
|
||||
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
|
||||
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
|
||||
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
|
||||
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
|
||||
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
|
||||
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
|
||||
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
||||
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
||||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
|
||||
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
|
||||
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
|
||||
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
|
||||
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
|
||||
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
|
||||
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
|
||||
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
|
||||
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
|
||||
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
|
||||
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
|
||||
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
|
||||
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
||||
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
|
||||
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
|
||||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
|
||||
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
|
||||
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
||||
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
|
||||
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
|
||||
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
|
||||
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
|
||||
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
|
||||
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
|
||||
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
|
||||
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
|
||||
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
|
||||
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
|
||||
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
|
||||
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
|
||||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
|
||||
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
|
||||
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
|
||||
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
|
||||
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
|
||||
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
|
||||
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
|
||||
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
|
||||
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
|
||||
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
|
||||
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
|
||||
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
|
||||
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
|
||||
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
||||
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
||||
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
||||
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
||||
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
||||
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
|
||||
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
|
||||
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
|
||||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
|
||||
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
|
||||
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
|
||||
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
|
||||
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
|
||||
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
|
||||
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
|
||||
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
|
||||
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
|
||||
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
|
||||
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
|
||||
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
|
||||
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
|
||||
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
|
||||
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
|
||||
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
|
||||
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
|
||||
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
|
||||
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
|
||||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
|
||||
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
|
||||
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
|
||||
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
|
||||
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
|
||||
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
|
||||
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
|
||||
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
|
||||
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
|
||||
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
|
||||
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
|
||||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
|
||||
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
|
||||
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
|
||||
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
|
||||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
|
||||
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
|
||||
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
|
||||
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
|
||||
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
||||
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
|
||||
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
|
||||
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
|
||||
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
|
||||
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
|
||||
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
|
BIN
vs2008/doc/_static/minus.png
vendored
Before Width: | Height: | Size: 199 B |
BIN
vs2008/doc/_static/plus.png
vendored
Before Width: | Height: | Size: 199 B |
62
vs2008/doc/_static/pygments.css
vendored
@ -1,62 +0,0 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #eeffcc; }
|
||||
.highlight .c { color: #408090; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666666 } /* Operator */
|
||||
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #007020 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #303030 } /* Generic.Output */
|
||||
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #902000 } /* Keyword.Type */
|
||||
.highlight .m { color: #208050 } /* Literal.Number */
|
||||
.highlight .s { color: #4070a0 } /* Literal.String */
|
||||
.highlight .na { color: #4070a0 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #60add5 } /* Name.Constant */
|
||||
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #007020 } /* Name.Exception */
|
||||
.highlight .nf { color: #06287e } /* Name.Function */
|
||||
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #bb60d5 } /* Name.Variable */
|
||||
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #208050 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #235388 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
|
560
vs2008/doc/_static/searchtools.js
vendored
@ -1,560 +0,0 @@
|
||||
/*
|
||||
* searchtools.js_t
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilties for the full-text search.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* helper function to return a node containing the
|
||||
* search summary for a given text. keywords is a list
|
||||
* of stemmed words, hlwords is the list of normal, unstemmed
|
||||
* words. the first one is used to find the occurance, the
|
||||
* latter for highlighting it.
|
||||
*/
|
||||
|
||||
jQuery.makeSearchSummary = function(text, keywords, hlwords) {
|
||||
var textLower = text.toLowerCase();
|
||||
var start = 0;
|
||||
$.each(keywords, function() {
|
||||
var i = textLower.indexOf(this.toLowerCase());
|
||||
if (i > -1)
|
||||
start = i;
|
||||
});
|
||||
start = Math.max(start - 120, 0);
|
||||
var excerpt = ((start > 0) ? '...' : '') +
|
||||
$.trim(text.substr(start, 240)) +
|
||||
((start + 240 - text.length) ? '...' : '');
|
||||
var rv = $('<div class="context"></div>').text(excerpt);
|
||||
$.each(hlwords, function() {
|
||||
rv = rv.highlightText(this, 'highlighted');
|
||||
});
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Porter Stemmer
|
||||
*/
|
||||
var Stemmer = function() {
|
||||
|
||||
var step2list = {
|
||||
ational: 'ate',
|
||||
tional: 'tion',
|
||||
enci: 'ence',
|
||||
anci: 'ance',
|
||||
izer: 'ize',
|
||||
bli: 'ble',
|
||||
alli: 'al',
|
||||
entli: 'ent',
|
||||
eli: 'e',
|
||||
ousli: 'ous',
|
||||
ization: 'ize',
|
||||
ation: 'ate',
|
||||
ator: 'ate',
|
||||
alism: 'al',
|
||||
iveness: 'ive',
|
||||
fulness: 'ful',
|
||||
ousness: 'ous',
|
||||
aliti: 'al',
|
||||
iviti: 'ive',
|
||||
biliti: 'ble',
|
||||
logi: 'log'
|
||||
};
|
||||
|
||||
var step3list = {
|
||||
icate: 'ic',
|
||||
ative: '',
|
||||
alize: 'al',
|
||||
iciti: 'ic',
|
||||
ical: 'ic',
|
||||
ful: '',
|
||||
ness: ''
|
||||
};
|
||||
|
||||
var c = "[^aeiou]"; // consonant
|
||||
var v = "[aeiouy]"; // vowel
|
||||
var C = c + "[^aeiouy]*"; // consonant sequence
|
||||
var V = v + "[aeiou]*"; // vowel sequence
|
||||
|
||||
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
||||
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
||||
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
||||
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
||||
|
||||
this.stemWord = function (w) {
|
||||
var stem;
|
||||
var suffix;
|
||||
var firstch;
|
||||
var origword = w;
|
||||
|
||||
if (w.length < 3)
|
||||
return w;
|
||||
|
||||
var re;
|
||||
var re2;
|
||||
var re3;
|
||||
var re4;
|
||||
|
||||
firstch = w.substr(0,1);
|
||||
if (firstch == "y")
|
||||
w = firstch.toUpperCase() + w.substr(1);
|
||||
|
||||
// Step 1a
|
||||
re = /^(.+?)(ss|i)es$/;
|
||||
re2 = /^(.+?)([^s])s$/;
|
||||
|
||||
if (re.test(w))
|
||||
w = w.replace(re,"$1$2");
|
||||
else if (re2.test(w))
|
||||
w = w.replace(re2,"$1$2");
|
||||
|
||||
// Step 1b
|
||||
re = /^(.+?)eed$/;
|
||||
re2 = /^(.+?)(ed|ing)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(fp[1])) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1];
|
||||
re2 = new RegExp(s_v);
|
||||
if (re2.test(stem)) {
|
||||
w = stem;
|
||||
re2 = /(at|bl|iz)$/;
|
||||
re3 = new RegExp("([^aeiouylsz])\\1$");
|
||||
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re2.test(w))
|
||||
w = w + "e";
|
||||
else if (re3.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
else if (re4.test(w))
|
||||
w = w + "e";
|
||||
}
|
||||
}
|
||||
|
||||
// Step 1c
|
||||
re = /^(.+?)y$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(s_v);
|
||||
if (re.test(stem))
|
||||
w = stem + "i";
|
||||
}
|
||||
|
||||
// Step 2
|
||||
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step2list[suffix];
|
||||
}
|
||||
|
||||
// Step 3
|
||||
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step3list[suffix];
|
||||
}
|
||||
|
||||
// Step 4
|
||||
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
||||
re2 = /^(.+?)(s|t)(ion)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
if (re.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1] + fp[2];
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re2.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
|
||||
// Step 5
|
||||
re = /^(.+?)e$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
re2 = new RegExp(meq1);
|
||||
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
||||
w = stem;
|
||||
}
|
||||
re = /ll$/;
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re.test(w) && re2.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
|
||||
// and turn initial Y back to y
|
||||
if (firstch == "y")
|
||||
w = firstch.toLowerCase() + w.substr(1);
|
||||
return w;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Search Module
|
||||
*/
|
||||
var Search = {
|
||||
|
||||
_index : null,
|
||||
_queued_query : null,
|
||||
_pulse_status : -1,
|
||||
|
||||
init : function() {
|
||||
var params = $.getQueryParameters();
|
||||
if (params.q) {
|
||||
var query = params.q[0];
|
||||
$('input[name="q"]')[0].value = query;
|
||||
this.performSearch(query);
|
||||
}
|
||||
},
|
||||
|
||||
loadIndex : function(url) {
|
||||
$.ajax({type: "GET", url: url, data: null, success: null,
|
||||
dataType: "script", cache: true});
|
||||
},
|
||||
|
||||
setIndex : function(index) {
|
||||
var q;
|
||||
this._index = index;
|
||||
if ((q = this._queued_query) !== null) {
|
||||
this._queued_query = null;
|
||||
Search.query(q);
|
||||
}
|
||||
},
|
||||
|
||||
hasIndex : function() {
|
||||
return this._index !== null;
|
||||
},
|
||||
|
||||
deferQuery : function(query) {
|
||||
this._queued_query = query;
|
||||
},
|
||||
|
||||
stopPulse : function() {
|
||||
this._pulse_status = 0;
|
||||
},
|
||||
|
||||
startPulse : function() {
|
||||
if (this._pulse_status >= 0)
|
||||
return;
|
||||
function pulse() {
|
||||
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||
var dotString = '';
|
||||
for (var i = 0; i < Search._pulse_status; i++)
|
||||
dotString += '.';
|
||||
Search.dots.text(dotString);
|
||||
if (Search._pulse_status > -1)
|
||||
window.setTimeout(pulse, 500);
|
||||
};
|
||||
pulse();
|
||||
},
|
||||
|
||||
/**
|
||||
* perform a search for something
|
||||
*/
|
||||
performSearch : function(query) {
|
||||
// create the required interface elements
|
||||
this.out = $('#search-results');
|
||||
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
|
||||
this.dots = $('<span></span>').appendTo(this.title);
|
||||
this.status = $('<p style="display: none"></p>').appendTo(this.out);
|
||||
this.output = $('<ul class="search"/>').appendTo(this.out);
|
||||
|
||||
$('#search-progress').text(_('Preparing search...'));
|
||||
this.startPulse();
|
||||
|
||||
// index already loaded, the browser was quick!
|
||||
if (this.hasIndex())
|
||||
this.query(query);
|
||||
else
|
||||
this.deferQuery(query);
|
||||
},
|
||||
|
||||
query : function(query) {
|
||||
var stopwords = ["and","then","into","it","as","are","in","if","for","no","there","their","was","is","be","to","that","but","they","not","such","with","by","a","on","these","of","will","this","near","the","or","at"];
|
||||
|
||||
// Stem the searchterms and add them to the correct list
|
||||
var stemmer = new Stemmer();
|
||||
var searchterms = [];
|
||||
var excluded = [];
|
||||
var hlterms = [];
|
||||
var tmp = query.split(/\s+/);
|
||||
var objectterms = [];
|
||||
for (var i = 0; i < tmp.length; i++) {
|
||||
if (tmp[i] != "") {
|
||||
objectterms.push(tmp[i].toLowerCase());
|
||||
}
|
||||
|
||||
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
|
||||
tmp[i] == "") {
|
||||
// skip this "word"
|
||||
continue;
|
||||
}
|
||||
// stem the word
|
||||
var word = stemmer.stemWord(tmp[i]).toLowerCase();
|
||||
// select the correct list
|
||||
if (word[0] == '-') {
|
||||
var toAppend = excluded;
|
||||
word = word.substr(1);
|
||||
}
|
||||
else {
|
||||
var toAppend = searchterms;
|
||||
hlterms.push(tmp[i].toLowerCase());
|
||||
}
|
||||
// only add if not already in the list
|
||||
if (!$.contains(toAppend, word))
|
||||
toAppend.push(word);
|
||||
};
|
||||
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
|
||||
|
||||
// console.debug('SEARCH: searching for:');
|
||||
// console.info('required: ', searchterms);
|
||||
// console.info('excluded: ', excluded);
|
||||
|
||||
// prepare search
|
||||
var filenames = this._index.filenames;
|
||||
var titles = this._index.titles;
|
||||
var terms = this._index.terms;
|
||||
var fileMap = {};
|
||||
var files = null;
|
||||
// different result priorities
|
||||
var importantResults = [];
|
||||
var objectResults = [];
|
||||
var regularResults = [];
|
||||
var unimportantResults = [];
|
||||
$('#search-progress').empty();
|
||||
|
||||
// lookup as object
|
||||
for (var i = 0; i < objectterms.length; i++) {
|
||||
var others = [].concat(objectterms.slice(0,i),
|
||||
objectterms.slice(i+1, objectterms.length))
|
||||
var results = this.performObjectSearch(objectterms[i], others);
|
||||
// Assume first word is most likely to be the object,
|
||||
// other words more likely to be in description.
|
||||
// Therefore put matches for earlier words first.
|
||||
// (Results are eventually used in reverse order).
|
||||
objectResults = results[0].concat(objectResults);
|
||||
importantResults = results[1].concat(importantResults);
|
||||
unimportantResults = results[2].concat(unimportantResults);
|
||||
}
|
||||
|
||||
// perform the search on the required terms
|
||||
for (var i = 0; i < searchterms.length; i++) {
|
||||
var word = searchterms[i];
|
||||
// no match but word was a required one
|
||||
if ((files = terms[word]) == null)
|
||||
break;
|
||||
if (files.length == undefined) {
|
||||
files = [files];
|
||||
}
|
||||
// create the mapping
|
||||
for (var j = 0; j < files.length; j++) {
|
||||
var file = files[j];
|
||||
if (file in fileMap)
|
||||
fileMap[file].push(word);
|
||||
else
|
||||
fileMap[file] = [word];
|
||||
}
|
||||
}
|
||||
|
||||
// now check if the files don't contain excluded terms
|
||||
for (var file in fileMap) {
|
||||
var valid = true;
|
||||
|
||||
// check if all requirements are matched
|
||||
if (fileMap[file].length != searchterms.length)
|
||||
continue;
|
||||
|
||||
// ensure that none of the excluded terms is in the
|
||||
// search result.
|
||||
for (var i = 0; i < excluded.length; i++) {
|
||||
if (terms[excluded[i]] == file ||
|
||||
$.contains(terms[excluded[i]] || [], file)) {
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// if we have still a valid result we can add it
|
||||
// to the result list
|
||||
if (valid)
|
||||
regularResults.push([filenames[file], titles[file], '', null]);
|
||||
}
|
||||
|
||||
// delete unused variables in order to not waste
|
||||
// memory until list is retrieved completely
|
||||
delete filenames, titles, terms;
|
||||
|
||||
// now sort the regular results descending by title
|
||||
regularResults.sort(function(a, b) {
|
||||
var left = a[1].toLowerCase();
|
||||
var right = b[1].toLowerCase();
|
||||
return (left > right) ? -1 : ((left < right) ? 1 : 0);
|
||||
});
|
||||
|
||||
// combine all results
|
||||
var results = unimportantResults.concat(regularResults)
|
||||
.concat(objectResults).concat(importantResults);
|
||||
|
||||
// print the results
|
||||
var resultCount = results.length;
|
||||
function displayNextItem() {
|
||||
// results left, load the summary and display it
|
||||
if (results.length) {
|
||||
var item = results.pop();
|
||||
var listItem = $('<li style="display:none"></li>');
|
||||
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
|
||||
// dirhtml builder
|
||||
var dirname = item[0] + '/';
|
||||
if (dirname.match(/\/index\/$/)) {
|
||||
dirname = dirname.substring(0, dirname.length-6);
|
||||
} else if (dirname == 'index/') {
|
||||
dirname = '';
|
||||
}
|
||||
listItem.append($('<a/>').attr('href',
|
||||
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
|
||||
highlightstring + item[2]).html(item[1]));
|
||||
} else {
|
||||
// normal html builders
|
||||
listItem.append($('<a/>').attr('href',
|
||||
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
|
||||
highlightstring + item[2]).html(item[1]));
|
||||
}
|
||||
if (item[3]) {
|
||||
listItem.append($('<span> (' + item[3] + ')</span>'));
|
||||
Search.output.append(listItem);
|
||||
listItem.slideDown(5, function() {
|
||||
displayNextItem();
|
||||
});
|
||||
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
|
||||
$.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
|
||||
item[0] + '.txt', function(data) {
|
||||
if (data != '') {
|
||||
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
|
||||
Search.output.append(listItem);
|
||||
}
|
||||
listItem.slideDown(5, function() {
|
||||
displayNextItem();
|
||||
});
|
||||
}, "text");
|
||||
} else {
|
||||
// no source available, just display title
|
||||
Search.output.append(listItem);
|
||||
listItem.slideDown(5, function() {
|
||||
displayNextItem();
|
||||
});
|
||||
}
|
||||
}
|
||||
// search finished, update title and status message
|
||||
else {
|
||||
Search.stopPulse();
|
||||
Search.title.text(_('Search Results'));
|
||||
if (!resultCount)
|
||||
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
|
||||
else
|
||||
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
|
||||
Search.status.fadeIn(500);
|
||||
}
|
||||
}
|
||||
displayNextItem();
|
||||
},
|
||||
|
||||
performObjectSearch : function(object, otherterms) {
|
||||
var filenames = this._index.filenames;
|
||||
var objects = this._index.objects;
|
||||
var objnames = this._index.objnames;
|
||||
var titles = this._index.titles;
|
||||
|
||||
var importantResults = [];
|
||||
var objectResults = [];
|
||||
var unimportantResults = [];
|
||||
|
||||
for (var prefix in objects) {
|
||||
for (var name in objects[prefix]) {
|
||||
var fullname = (prefix ? prefix + '.' : '') + name;
|
||||
if (fullname.toLowerCase().indexOf(object) > -1) {
|
||||
var match = objects[prefix][name];
|
||||
var objname = objnames[match[1]][2];
|
||||
var title = titles[match[0]];
|
||||
// If more than one term searched for, we require other words to be
|
||||
// found in the name/title/description
|
||||
if (otherterms.length > 0) {
|
||||
var haystack = (prefix + ' ' + name + ' ' +
|
||||
objname + ' ' + title).toLowerCase();
|
||||
var allfound = true;
|
||||
for (var i = 0; i < otherterms.length; i++) {
|
||||
if (haystack.indexOf(otherterms[i]) == -1) {
|
||||
allfound = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!allfound) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
var descr = objname + _(', in ') + title;
|
||||
anchor = match[3];
|
||||
if (anchor == '')
|
||||
anchor = fullname;
|
||||
else if (anchor == '-')
|
||||
anchor = objnames[match[1]][1] + '-' + fullname;
|
||||
result = [filenames[match[0]], fullname, '#'+anchor, descr];
|
||||
switch (match[2]) {
|
||||
case 1: objectResults.push(result); break;
|
||||
case 0: importantResults.push(result); break;
|
||||
case 2: unimportantResults.push(result); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sort results descending
|
||||
objectResults.sort(function(a, b) {
|
||||
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
|
||||
});
|
||||
|
||||
importantResults.sort(function(a, b) {
|
||||
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
|
||||
});
|
||||
|
||||
unimportantResults.sort(function(a, b) {
|
||||
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
|
||||
});
|
||||
|
||||
return [importantResults, objectResults, unimportantResults]
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
Search.init();
|
||||
});
|
151
vs2008/doc/_static/sidebar.js
vendored
@ -1,151 +0,0 @@
|
||||
/*
|
||||
* sidebar.js
|
||||
* ~~~~~~~~~~
|
||||
*
|
||||
* This script makes the Sphinx sidebar collapsible.
|
||||
*
|
||||
* .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
|
||||
* in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
|
||||
* used to collapse and expand the sidebar.
|
||||
*
|
||||
* When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
|
||||
* and the width of the sidebar and the margin-left of the document
|
||||
* are decreased. When the sidebar is expanded the opposite happens.
|
||||
* This script saves a per-browser/per-session cookie used to
|
||||
* remember the position of the sidebar among the pages.
|
||||
* Once the browser is closed the cookie is deleted and the position
|
||||
* reset to the default (expanded).
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
$(function() {
|
||||
// global elements used by the functions.
|
||||
// the 'sidebarbutton' element is defined as global after its
|
||||
// creation, in the add_sidebar_button function
|
||||
var bodywrapper = $('.bodywrapper');
|
||||
var sidebar = $('.sphinxsidebar');
|
||||
var sidebarwrapper = $('.sphinxsidebarwrapper');
|
||||
|
||||
// for some reason, the document has no sidebar; do not run into errors
|
||||
if (!sidebar.length) return;
|
||||
|
||||
// original margin-left of the bodywrapper and width of the sidebar
|
||||
// with the sidebar expanded
|
||||
var bw_margin_expanded = bodywrapper.css('margin-left');
|
||||
var ssb_width_expanded = sidebar.width();
|
||||
|
||||
// margin-left of the bodywrapper and width of the sidebar
|
||||
// with the sidebar collapsed
|
||||
var bw_margin_collapsed = '.8em';
|
||||
var ssb_width_collapsed = '.8em';
|
||||
|
||||
// colors used by the current theme
|
||||
var dark_color = $('.related').css('background-color');
|
||||
var light_color = $('.document').css('background-color');
|
||||
|
||||
function sidebar_is_collapsed() {
|
||||
return sidebarwrapper.is(':not(:visible)');
|
||||
}
|
||||
|
||||
function toggle_sidebar() {
|
||||
if (sidebar_is_collapsed())
|
||||
expand_sidebar();
|
||||
else
|
||||
collapse_sidebar();
|
||||
}
|
||||
|
||||
function collapse_sidebar() {
|
||||
sidebarwrapper.hide();
|
||||
sidebar.css('width', ssb_width_collapsed);
|
||||
bodywrapper.css('margin-left', bw_margin_collapsed);
|
||||
sidebarbutton.css({
|
||||
'margin-left': '0',
|
||||
'height': bodywrapper.height()
|
||||
});
|
||||
sidebarbutton.find('span').text('»');
|
||||
sidebarbutton.attr('title', _('Expand sidebar'));
|
||||
document.cookie = 'sidebar=collapsed';
|
||||
}
|
||||
|
||||
function expand_sidebar() {
|
||||
bodywrapper.css('margin-left', bw_margin_expanded);
|
||||
sidebar.css('width', ssb_width_expanded);
|
||||
sidebarwrapper.show();
|
||||
sidebarbutton.css({
|
||||
'margin-left': ssb_width_expanded-12,
|
||||
'height': bodywrapper.height()
|
||||
});
|
||||
sidebarbutton.find('span').text('«');
|
||||
sidebarbutton.attr('title', _('Collapse sidebar'));
|
||||
document.cookie = 'sidebar=expanded';
|
||||
}
|
||||
|
||||
function add_sidebar_button() {
|
||||
sidebarwrapper.css({
|
||||
'float': 'left',
|
||||
'margin-right': '0',
|
||||
'width': ssb_width_expanded - 28
|
||||
});
|
||||
// create the button
|
||||
sidebar.append(
|
||||
'<div id="sidebarbutton"><span>«</span></div>'
|
||||
);
|
||||
var sidebarbutton = $('#sidebarbutton');
|
||||
light_color = sidebarbutton.css('background-color');
|
||||
// find the height of the viewport to center the '<<' in the page
|
||||
var viewport_height;
|
||||
if (window.innerHeight)
|
||||
viewport_height = window.innerHeight;
|
||||
else
|
||||
viewport_height = $(window).height();
|
||||
sidebarbutton.find('span').css({
|
||||
'display': 'block',
|
||||
'margin-top': (viewport_height - sidebar.position().top - 20) / 2
|
||||
});
|
||||
|
||||
sidebarbutton.click(toggle_sidebar);
|
||||
sidebarbutton.attr('title', _('Collapse sidebar'));
|
||||
sidebarbutton.css({
|
||||
'color': '#FFFFFF',
|
||||
'border-left': '1px solid ' + dark_color,
|
||||
'font-size': '1.2em',
|
||||
'cursor': 'pointer',
|
||||
'height': bodywrapper.height(),
|
||||
'padding-top': '1px',
|
||||
'margin-left': ssb_width_expanded - 12
|
||||
});
|
||||
|
||||
sidebarbutton.hover(
|
||||
function () {
|
||||
$(this).css('background-color', dark_color);
|
||||
},
|
||||
function () {
|
||||
$(this).css('background-color', light_color);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function set_position_from_cookie() {
|
||||
if (!document.cookie)
|
||||
return;
|
||||
var items = document.cookie.split(';');
|
||||
for(var k=0; k<items.length; k++) {
|
||||
var key_val = items[k].split('=');
|
||||
var key = key_val[0];
|
||||
if (key == 'sidebar') {
|
||||
var value = key_val[1];
|
||||
if ((value == 'collapsed') && (!sidebar_is_collapsed()))
|
||||
collapse_sidebar();
|
||||
else if ((value == 'expanded') && (sidebar_is_collapsed()))
|
||||
expand_sidebar();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
add_sidebar_button();
|
||||
var sidebarbutton = $('#sidebarbutton');
|
||||
set_position_from_cookie();
|
||||
});
|
341
vs2008/doc/_static/tesseract.css
vendored
@ -1,341 +0,0 @@
|
||||
@import url("default.css");
|
||||
|
||||
/* tesseract custom styles */
|
||||
|
||||
div.body {
|
||||
font-family: 'Droid Serif', Georgia, serif;
|
||||
background-color: #FFFFE4;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding-top: 0; /* to get feynman diagram to align at top correctly */
|
||||
}
|
||||
|
||||
div.bodywrapper {
|
||||
margin: 0 0 0 330px;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
padding: 10px, 0, 0, 0;
|
||||
}
|
||||
|
||||
div.body h1,
|
||||
div.body h2,
|
||||
div.body h3,
|
||||
div.body h4,
|
||||
div.body h5,
|
||||
div.body h6 {
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup
|
||||
{
|
||||
font-size: 70%;
|
||||
}
|
||||
|
||||
.caption {
|
||||
font-weight: bold;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
div.document
|
||||
li.toctree-l1 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
list-style: square outside none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar a.current {
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
div.body p,
|
||||
div.body dd,
|
||||
div.body li {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.legend {
|
||||
width: 75%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: -1em;
|
||||
}
|
||||
|
||||
div.legend pre {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- hyperlink styles ------------------------------------------------------ */
|
||||
|
||||
a:visited {
|
||||
color: #7C3578;
|
||||
}
|
||||
|
||||
a.external,
|
||||
a.external:visited {
|
||||
border-bottom: 1px dashed;
|
||||
}
|
||||
|
||||
a.external:hover {
|
||||
text-decoration: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* ----- */
|
||||
|
||||
div.admonition.tip {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
div.container.subtitle {
|
||||
font-size: 160%;
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
font-weight: normal;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
blockquote.epigraph {
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
margin:1em;
|
||||
padding: 0 1em;
|
||||
}
|
||||
|
||||
/* table definitions from Python 2.6 docs basic.css */
|
||||
|
||||
table.docutils {
|
||||
border: 1px solid #dce;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.docutils td {
|
||||
/* padding: 2px 5px 2px 5px; */
|
||||
border: 1px solid #dce;
|
||||
background-color: #eef;
|
||||
}
|
||||
|
||||
table.docutils th {
|
||||
border: 1px solid #cac;
|
||||
background-color: #ede;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
th.head {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
th.head p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* modified p style within tables, normally
|
||||
padding-top: 0;
|
||||
margin-bottom: 1em;
|
||||
*/
|
||||
|
||||
table.docutils td,
|
||||
table.docutils th,
|
||||
table p {
|
||||
padding: 0.25em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
table div {
|
||||
padding: 0.25em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
table div div {
|
||||
padding: 0em;
|
||||
}
|
||||
|
||||
table .line-block {
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
td {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
table.centered {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.centercells td,
|
||||
table.centercells th
|
||||
{
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table caption {
|
||||
font-weight: bold;
|
||||
margin-bottom: 0.50em;
|
||||
}
|
||||
|
||||
/* custom text roles */
|
||||
|
||||
.filesystem {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%; /* this breaks IE8 wrapping calculations in sidebar? */
|
||||
}
|
||||
|
||||
.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
em.bold-italic {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.underline {
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
|
||||
img.border {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
li img {
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
/* Standard (after modifications) Sphinx inline roles */
|
||||
/*
|
||||
|
||||
.command,
|
||||
.kbd,
|
||||
.makevar,
|
||||
.program,
|
||||
.regexp
|
||||
{
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
}
|
||||
*/
|
||||
|
||||
.kbd,
|
||||
.makevar,
|
||||
.program,
|
||||
.regexp
|
||||
{
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
white-space: pre-wrap;
|
||||
background-color: #ecf0f3;
|
||||
padding: 0 1px 0 1px;
|
||||
}
|
||||
|
||||
|
||||
.command,
|
||||
.makevar,
|
||||
.program
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.command {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
em.guilabel {
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
em.menuselection {
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* definition */
|
||||
em.dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* glossary term */
|
||||
em.std-term {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
tt.file {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/* for "optional" parts of files */
|
||||
tt.file em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* sort-filter-table.css stuff */
|
||||
|
||||
/* Striping */
|
||||
tr.alternate td {
|
||||
background-color:#FCFFEE;
|
||||
}
|
||||
|
||||
/* for docutil generated TOC */
|
||||
div.body
|
||||
div.contents
|
||||
p
|
||||
{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* for collapsible sidebar */
|
||||
div#sidebarbutton {
|
||||
background-color: #267FA5;
|
||||
}
|
||||
|
||||
/* TODO list colors */
|
||||
div.admonition-todo {
|
||||
color: #B83373;
|
||||
}
|
||||
|
||||
div.admonition-todo p.admonition-title{
|
||||
color: #5032B3;
|
||||
}
|
23
vs2008/doc/_static/underscore.js
vendored
@ -1,23 +0,0 @@
|
||||
// Underscore.js 0.5.5
|
||||
// (c) 2009 Jeremy Ashkenas, DocumentCloud Inc.
|
||||
// Underscore is freely distributable under the terms of the MIT license.
|
||||
// Portions of Underscore are inspired by or borrowed from Prototype.js,
|
||||
// Oliver Steele's Functional, and John Resig's Micro-Templating.
|
||||
// For all details and documentation:
|
||||
// http://documentcloud.github.com/underscore/
|
||||
(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d,
|
||||
a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);
|
||||
var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
|
||||
d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(b.isArray(a))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply(e,d)})};b.pluck=
|
||||
function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,
|
||||
function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return c&&!d?k.call(a,
|
||||
0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last(d)!=e:!b.include(d,
|
||||
e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexOf(c);for(var d=
|
||||
a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;1;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind(a[d],a)});
|
||||
return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.range(0,a.length);
|
||||
var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c||a&&!c)return false;
|
||||
if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a){return b.keys(a).length==
|
||||
0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!b.isArray(a)&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};b.isRegExp=function(a){return!!(a&&
|
||||
a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.template=function(a,c){a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g,
|
||||
" ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b.toArray(arguments);
|
||||
o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.value=function(){return this._wrapped}})();
|
BIN
vs2008/doc/_static/up-pressed.png
vendored
Before Width: | Height: | Size: 372 B |
BIN
vs2008/doc/_static/up.png
vendored
Before Width: | Height: | Size: 363 B |
808
vs2008/doc/_static/websupport.js
vendored
@ -1,808 +0,0 @@
|
||||
/*
|
||||
* websupport.js
|
||||
* ~~~~~~~~~~~~~
|
||||
*
|
||||
* sphinx.websupport utilties for all documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
$.fn.autogrow = function() {
|
||||
return this.each(function() {
|
||||
var textarea = this;
|
||||
|
||||
$.fn.autogrow.resize(textarea);
|
||||
|
||||
$(textarea)
|
||||
.focus(function() {
|
||||
textarea.interval = setInterval(function() {
|
||||
$.fn.autogrow.resize(textarea);
|
||||
}, 500);
|
||||
})
|
||||
.blur(function() {
|
||||
clearInterval(textarea.interval);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.autogrow.resize = function(textarea) {
|
||||
var lineHeight = parseInt($(textarea).css('line-height'), 10);
|
||||
var lines = textarea.value.split('\n');
|
||||
var columns = textarea.cols;
|
||||
var lineCount = 0;
|
||||
$.each(lines, function() {
|
||||
lineCount += Math.ceil(this.length / columns) || 1;
|
||||
});
|
||||
var height = lineHeight * (lineCount + 1);
|
||||
$(textarea).css('height', height);
|
||||
};
|
||||
})(jQuery);
|
||||
|
||||
(function($) {
|
||||
var comp, by;
|
||||
|
||||
function init() {
|
||||
initEvents();
|
||||
initComparator();
|
||||
}
|
||||
|
||||
function initEvents() {
|
||||
$('a.comment-close').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
hide($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.vote').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
handleVote($(this));
|
||||
});
|
||||
$('a.reply').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
openReply($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.close-reply').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
closeReply($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.sort-option').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
handleReSort($(this));
|
||||
});
|
||||
$('a.show-proposal').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
showProposal($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.hide-proposal').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
hideProposal($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.show-propose-change').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
showProposeChange($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.hide-propose-change').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
hideProposeChange($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.accept-comment').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
acceptComment($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.delete-comment').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
deleteComment($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.comment-markup').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
toggleCommentMarkupBox($(this).attr('id').substring(2));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set comp, which is a comparator function used for sorting and
|
||||
* inserting comments into the list.
|
||||
*/
|
||||
function setComparator() {
|
||||
// If the first three letters are "asc", sort in ascending order
|
||||
// and remove the prefix.
|
||||
if (by.substring(0,3) == 'asc') {
|
||||
var i = by.substring(3);
|
||||
comp = function(a, b) { return a[i] - b[i]; };
|
||||
} else {
|
||||
// Otherwise sort in descending order.
|
||||
comp = function(a, b) { return b[by] - a[by]; };
|
||||
}
|
||||
|
||||
// Reset link styles and format the selected sort option.
|
||||
$('a.sel').attr('href', '#').removeClass('sel');
|
||||
$('a.by' + by).removeAttr('href').addClass('sel');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a comp function. If the user has preferences stored in
|
||||
* the sortBy cookie, use those, otherwise use the default.
|
||||
*/
|
||||
function initComparator() {
|
||||
by = 'rating'; // Default to sort by rating.
|
||||
// If the sortBy cookie is set, use that instead.
|
||||
if (document.cookie.length > 0) {
|
||||
var start = document.cookie.indexOf('sortBy=');
|
||||
if (start != -1) {
|
||||
start = start + 7;
|
||||
var end = document.cookie.indexOf(";", start);
|
||||
if (end == -1) {
|
||||
end = document.cookie.length;
|
||||
by = unescape(document.cookie.substring(start, end));
|
||||
}
|
||||
}
|
||||
}
|
||||
setComparator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a comment div.
|
||||
*/
|
||||
function show(id) {
|
||||
$('#ao' + id).hide();
|
||||
$('#ah' + id).show();
|
||||
var context = $.extend({id: id}, opts);
|
||||
var popup = $(renderTemplate(popupTemplate, context)).hide();
|
||||
popup.find('textarea[name="proposal"]').hide();
|
||||
popup.find('a.by' + by).addClass('sel');
|
||||
var form = popup.find('#cf' + id);
|
||||
form.submit(function(event) {
|
||||
event.preventDefault();
|
||||
addComment(form);
|
||||
});
|
||||
$('#s' + id).after(popup);
|
||||
popup.slideDown('fast', function() {
|
||||
getComments(id);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide a comment div.
|
||||
*/
|
||||
function hide(id) {
|
||||
$('#ah' + id).hide();
|
||||
$('#ao' + id).show();
|
||||
var div = $('#sc' + id);
|
||||
div.slideUp('fast', function() {
|
||||
div.remove();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an ajax request to get comments for a node
|
||||
* and insert the comments into the comments tree.
|
||||
*/
|
||||
function getComments(id) {
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: opts.getCommentsURL,
|
||||
data: {node: id},
|
||||
success: function(data, textStatus, request) {
|
||||
var ul = $('#cl' + id);
|
||||
var speed = 100;
|
||||
$('#cf' + id)
|
||||
.find('textarea[name="proposal"]')
|
||||
.data('source', data.source);
|
||||
|
||||
if (data.comments.length === 0) {
|
||||
ul.html('<li>No comments yet.</li>');
|
||||
ul.data('empty', true);
|
||||
} else {
|
||||
// If there are comments, sort them and put them in the list.
|
||||
var comments = sortComments(data.comments);
|
||||
speed = data.comments.length * 100;
|
||||
appendComments(comments, ul);
|
||||
ul.data('empty', false);
|
||||
}
|
||||
$('#cn' + id).slideUp(speed + 200);
|
||||
ul.slideDown(speed);
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem retrieving the comments.');
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a comment via ajax and insert the comment into the comment tree.
|
||||
*/
|
||||
function addComment(form) {
|
||||
var node_id = form.find('input[name="node"]').val();
|
||||
var parent_id = form.find('input[name="parent"]').val();
|
||||
var text = form.find('textarea[name="comment"]').val();
|
||||
var proposal = form.find('textarea[name="proposal"]').val();
|
||||
|
||||
if (text == '') {
|
||||
showError('Please enter a comment.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable the form that is being submitted.
|
||||
form.find('textarea,input').attr('disabled', 'disabled');
|
||||
|
||||
// Send the comment to the server.
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: opts.addCommentURL,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
node: node_id,
|
||||
parent: parent_id,
|
||||
text: text,
|
||||
proposal: proposal
|
||||
},
|
||||
success: function(data, textStatus, error) {
|
||||
// Reset the form.
|
||||
if (node_id) {
|
||||
hideProposeChange(node_id);
|
||||
}
|
||||
form.find('textarea')
|
||||
.val('')
|
||||
.add(form.find('input'))
|
||||
.removeAttr('disabled');
|
||||
var ul = $('#cl' + (node_id || parent_id));
|
||||
if (ul.data('empty')) {
|
||||
$(ul).empty();
|
||||
ul.data('empty', false);
|
||||
}
|
||||
insertComment(data.comment);
|
||||
var ao = $('#ao' + node_id);
|
||||
ao.find('img').attr({'src': opts.commentBrightImage});
|
||||
if (node_id) {
|
||||
// if this was a "root" comment, remove the commenting box
|
||||
// (the user can get it back by reopening the comment popup)
|
||||
$('#ca' + node_id).slideUp();
|
||||
}
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
form.find('textarea,input').removeAttr('disabled');
|
||||
showError('Oops, there was a problem adding the comment.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively append comments to the main comment list and children
|
||||
* lists, creating the comment tree.
|
||||
*/
|
||||
function appendComments(comments, ul) {
|
||||
$.each(comments, function() {
|
||||
var div = createCommentDiv(this);
|
||||
ul.append($(document.createElement('li')).html(div));
|
||||
appendComments(this.children, div.find('ul.comment-children'));
|
||||
// To avoid stagnating data, don't store the comments children in data.
|
||||
this.children = null;
|
||||
div.data('comment', this);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* After adding a new comment, it must be inserted in the correct
|
||||
* location in the comment tree.
|
||||
*/
|
||||
function insertComment(comment) {
|
||||
var div = createCommentDiv(comment);
|
||||
|
||||
// To avoid stagnating data, don't store the comments children in data.
|
||||
comment.children = null;
|
||||
div.data('comment', comment);
|
||||
|
||||
var ul = $('#cl' + (comment.node || comment.parent));
|
||||
var siblings = getChildren(ul);
|
||||
|
||||
var li = $(document.createElement('li'));
|
||||
li.hide();
|
||||
|
||||
// Determine where in the parents children list to insert this comment.
|
||||
for(i=0; i < siblings.length; i++) {
|
||||
if (comp(comment, siblings[i]) <= 0) {
|
||||
$('#cd' + siblings[i].id)
|
||||
.parent()
|
||||
.before(li.html(div));
|
||||
li.slideDown('fast');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If we get here, this comment rates lower than all the others,
|
||||
// or it is the only comment in the list.
|
||||
ul.append(li.html(div));
|
||||
li.slideDown('fast');
|
||||
}
|
||||
|
||||
function acceptComment(id) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: opts.acceptCommentURL,
|
||||
data: {id: id},
|
||||
success: function(data, textStatus, request) {
|
||||
$('#cm' + id).fadeOut('fast');
|
||||
$('#cd' + id).removeClass('moderate');
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem accepting the comment.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteComment(id) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: opts.deleteCommentURL,
|
||||
data: {id: id},
|
||||
success: function(data, textStatus, request) {
|
||||
var div = $('#cd' + id);
|
||||
if (data == 'delete') {
|
||||
// Moderator mode: remove the comment and all children immediately
|
||||
div.slideUp('fast', function() {
|
||||
div.remove();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// User mode: only mark the comment as deleted
|
||||
div
|
||||
.find('span.user-id:first')
|
||||
.text('[deleted]').end()
|
||||
.find('div.comment-text:first')
|
||||
.text('[deleted]').end()
|
||||
.find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
|
||||
', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
|
||||
.remove();
|
||||
var comment = div.data('comment');
|
||||
comment.username = '[deleted]';
|
||||
comment.text = '[deleted]';
|
||||
div.data('comment', comment);
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem deleting the comment.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function showProposal(id) {
|
||||
$('#sp' + id).hide();
|
||||
$('#hp' + id).show();
|
||||
$('#pr' + id).slideDown('fast');
|
||||
}
|
||||
|
||||
function hideProposal(id) {
|
||||
$('#hp' + id).hide();
|
||||
$('#sp' + id).show();
|
||||
$('#pr' + id).slideUp('fast');
|
||||
}
|
||||
|
||||
function showProposeChange(id) {
|
||||
$('#pc' + id).hide();
|
||||
$('#hc' + id).show();
|
||||
var textarea = $('#pt' + id);
|
||||
textarea.val(textarea.data('source'));
|
||||
$.fn.autogrow.resize(textarea[0]);
|
||||
textarea.slideDown('fast');
|
||||
}
|
||||
|
||||
function hideProposeChange(id) {
|
||||
$('#hc' + id).hide();
|
||||
$('#pc' + id).show();
|
||||
var textarea = $('#pt' + id);
|
||||
textarea.val('').removeAttr('disabled');
|
||||
textarea.slideUp('fast');
|
||||
}
|
||||
|
||||
function toggleCommentMarkupBox(id) {
|
||||
$('#mb' + id).toggle();
|
||||
}
|
||||
|
||||
/** Handle when the user clicks on a sort by link. */
|
||||
function handleReSort(link) {
|
||||
var classes = link.attr('class').split(/\s+/);
|
||||
for (var i=0; i<classes.length; i++) {
|
||||
if (classes[i] != 'sort-option') {
|
||||
by = classes[i].substring(2);
|
||||
}
|
||||
}
|
||||
setComparator();
|
||||
// Save/update the sortBy cookie.
|
||||
var expiration = new Date();
|
||||
expiration.setDate(expiration.getDate() + 365);
|
||||
document.cookie= 'sortBy=' + escape(by) +
|
||||
';expires=' + expiration.toUTCString();
|
||||
$('ul.comment-ul').each(function(index, ul) {
|
||||
var comments = getChildren($(ul), true);
|
||||
comments = sortComments(comments);
|
||||
appendComments(comments, $(ul).empty());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to process a vote when a user clicks an arrow.
|
||||
*/
|
||||
function handleVote(link) {
|
||||
if (!opts.voting) {
|
||||
showError("You'll need to login to vote.");
|
||||
return;
|
||||
}
|
||||
|
||||
var id = link.attr('id');
|
||||
if (!id) {
|
||||
// Didn't click on one of the voting arrows.
|
||||
return;
|
||||
}
|
||||
// If it is an unvote, the new vote value is 0,
|
||||
// Otherwise it's 1 for an upvote, or -1 for a downvote.
|
||||
var value = 0;
|
||||
if (id.charAt(1) != 'u') {
|
||||
value = id.charAt(0) == 'u' ? 1 : -1;
|
||||
}
|
||||
// The data to be sent to the server.
|
||||
var d = {
|
||||
comment_id: id.substring(2),
|
||||
value: value
|
||||
};
|
||||
|
||||
// Swap the vote and unvote links.
|
||||
link.hide();
|
||||
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
|
||||
.show();
|
||||
|
||||
// The div the comment is displayed in.
|
||||
var div = $('div#cd' + d.comment_id);
|
||||
var data = div.data('comment');
|
||||
|
||||
// If this is not an unvote, and the other vote arrow has
|
||||
// already been pressed, unpress it.
|
||||
if ((d.value !== 0) && (data.vote === d.value * -1)) {
|
||||
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
|
||||
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
|
||||
}
|
||||
|
||||
// Update the comments rating in the local data.
|
||||
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
|
||||
data.vote = d.value;
|
||||
div.data('comment', data);
|
||||
|
||||
// Change the rating text.
|
||||
div.find('.rating:first')
|
||||
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
|
||||
|
||||
// Send the vote information to the server.
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: opts.processVoteURL,
|
||||
data: d,
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem casting that vote.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a reply form used to reply to an existing comment.
|
||||
*/
|
||||
function openReply(id) {
|
||||
// Swap out the reply link for the hide link
|
||||
$('#rl' + id).hide();
|
||||
$('#cr' + id).show();
|
||||
|
||||
// Add the reply li to the children ul.
|
||||
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
|
||||
$('#cl' + id)
|
||||
.prepend(div)
|
||||
// Setup the submit handler for the reply form.
|
||||
.find('#rf' + id)
|
||||
.submit(function(event) {
|
||||
event.preventDefault();
|
||||
addComment($('#rf' + id));
|
||||
closeReply(id);
|
||||
})
|
||||
.find('input[type=button]')
|
||||
.click(function() {
|
||||
closeReply(id);
|
||||
});
|
||||
div.slideDown('fast', function() {
|
||||
$('#rf' + id).find('textarea').focus();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the reply form opened with openReply.
|
||||
*/
|
||||
function closeReply(id) {
|
||||
// Remove the reply div from the DOM.
|
||||
$('#rd' + id).slideUp('fast', function() {
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
// Swap out the hide link for the reply link
|
||||
$('#cr' + id).hide();
|
||||
$('#rl' + id).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively sort a tree of comments using the comp comparator.
|
||||
*/
|
||||
function sortComments(comments) {
|
||||
comments.sort(comp);
|
||||
$.each(comments, function() {
|
||||
this.children = sortComments(this.children);
|
||||
});
|
||||
return comments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the children comments from a ul. If recursive is true,
|
||||
* recursively include childrens' children.
|
||||
*/
|
||||
function getChildren(ul, recursive) {
|
||||
var children = [];
|
||||
ul.children().children("[id^='cd']")
|
||||
.each(function() {
|
||||
var comment = $(this).data('comment');
|
||||
if (recursive)
|
||||
comment.children = getChildren($(this).find('#cl' + comment.id), true);
|
||||
children.push(comment);
|
||||
});
|
||||
return children;
|
||||
}
|
||||
|
||||
/** Create a div to display a comment in. */
|
||||
function createCommentDiv(comment) {
|
||||
if (!comment.displayed && !opts.moderator) {
|
||||
return $('<div class="moderate">Thank you! Your comment will show up '
|
||||
+ 'once it is has been approved by a moderator.</div>');
|
||||
}
|
||||
// Prettify the comment rating.
|
||||
comment.pretty_rating = comment.rating + ' point' +
|
||||
(comment.rating == 1 ? '' : 's');
|
||||
// Make a class (for displaying not yet moderated comments differently)
|
||||
comment.css_class = comment.displayed ? '' : ' moderate';
|
||||
// Create a div for this comment.
|
||||
var context = $.extend({}, opts, comment);
|
||||
var div = $(renderTemplate(commentTemplate, context));
|
||||
|
||||
// If the user has voted on this comment, highlight the correct arrow.
|
||||
if (comment.vote) {
|
||||
var direction = (comment.vote == 1) ? 'u' : 'd';
|
||||
div.find('#' + direction + 'v' + comment.id).hide();
|
||||
div.find('#' + direction + 'u' + comment.id).show();
|
||||
}
|
||||
|
||||
if (opts.moderator || comment.text != '[deleted]') {
|
||||
div.find('a.reply').show();
|
||||
if (comment.proposal_diff)
|
||||
div.find('#sp' + comment.id).show();
|
||||
if (opts.moderator && !comment.displayed)
|
||||
div.find('#cm' + comment.id).show();
|
||||
if (opts.moderator || (opts.username == comment.username))
|
||||
div.find('#dc' + comment.id).show();
|
||||
}
|
||||
return div;
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple template renderer. Placeholders such as <%id%> are replaced
|
||||
* by context['id'] with items being escaped. Placeholders such as <#id#>
|
||||
* are not escaped.
|
||||
*/
|
||||
function renderTemplate(template, context) {
|
||||
var esc = $(document.createElement('div'));
|
||||
|
||||
function handle(ph, escape) {
|
||||
var cur = context;
|
||||
$.each(ph.split('.'), function() {
|
||||
cur = cur[this];
|
||||
});
|
||||
return escape ? esc.text(cur || "").html() : cur;
|
||||
}
|
||||
|
||||
return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
|
||||
return handle(arguments[2], arguments[1] == '%' ? true : false);
|
||||
});
|
||||
}
|
||||
|
||||
/** Flash an error message briefly. */
|
||||
function showError(message) {
|
||||
$(document.createElement('div')).attr({'class': 'popup-error'})
|
||||
.append($(document.createElement('div'))
|
||||
.attr({'class': 'error-message'}).text(message))
|
||||
.appendTo('body')
|
||||
.fadeIn("slow")
|
||||
.delay(2000)
|
||||
.fadeOut("slow");
|
||||
}
|
||||
|
||||
/** Add a link the user uses to open the comments popup. */
|
||||
$.fn.comment = function() {
|
||||
return this.each(function() {
|
||||
var id = $(this).attr('id').substring(1);
|
||||
var count = COMMENT_METADATA[id];
|
||||
var title = count + ' comment' + (count == 1 ? '' : 's');
|
||||
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
|
||||
var addcls = count == 0 ? ' nocomment' : '';
|
||||
$(this)
|
||||
.append(
|
||||
$(document.createElement('a')).attr({
|
||||
href: '#',
|
||||
'class': 'sphinx-comment-open' + addcls,
|
||||
id: 'ao' + id
|
||||
})
|
||||
.append($(document.createElement('img')).attr({
|
||||
src: image,
|
||||
alt: 'comment',
|
||||
title: title
|
||||
}))
|
||||
.click(function(event) {
|
||||
event.preventDefault();
|
||||
show($(this).attr('id').substring(2));
|
||||
})
|
||||
)
|
||||
.append(
|
||||
$(document.createElement('a')).attr({
|
||||
href: '#',
|
||||
'class': 'sphinx-comment-close hidden',
|
||||
id: 'ah' + id
|
||||
})
|
||||
.append($(document.createElement('img')).attr({
|
||||
src: opts.closeCommentImage,
|
||||
alt: 'close',
|
||||
title: 'close'
|
||||
}))
|
||||
.click(function(event) {
|
||||
event.preventDefault();
|
||||
hide($(this).attr('id').substring(2));
|
||||
})
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
var opts = {
|
||||
processVoteURL: '/_process_vote',
|
||||
addCommentURL: '/_add_comment',
|
||||
getCommentsURL: '/_get_comments',
|
||||
acceptCommentURL: '/_accept_comment',
|
||||
deleteCommentURL: '/_delete_comment',
|
||||
commentImage: '/static/_static/comment.png',
|
||||
closeCommentImage: '/static/_static/comment-close.png',
|
||||
loadingImage: '/static/_static/ajax-loader.gif',
|
||||
commentBrightImage: '/static/_static/comment-bright.png',
|
||||
upArrow: '/static/_static/up.png',
|
||||
downArrow: '/static/_static/down.png',
|
||||
upArrowPressed: '/static/_static/up-pressed.png',
|
||||
downArrowPressed: '/static/_static/down-pressed.png',
|
||||
voting: false,
|
||||
moderator: false
|
||||
};
|
||||
|
||||
if (typeof COMMENT_OPTIONS != "undefined") {
|
||||
opts = jQuery.extend(opts, COMMENT_OPTIONS);
|
||||
}
|
||||
|
||||
var popupTemplate = '\
|
||||
<div class="sphinx-comments" id="sc<%id%>">\
|
||||
<p class="sort-options">\
|
||||
Sort by:\
|
||||
<a href="#" class="sort-option byrating">best rated</a>\
|
||||
<a href="#" class="sort-option byascage">newest</a>\
|
||||
<a href="#" class="sort-option byage">oldest</a>\
|
||||
</p>\
|
||||
<div class="comment-header">Comments</div>\
|
||||
<div class="comment-loading" id="cn<%id%>">\
|
||||
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
|
||||
<ul id="cl<%id%>" class="comment-ul"></ul>\
|
||||
<div id="ca<%id%>">\
|
||||
<p class="add-a-comment">Add a comment\
|
||||
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
|
||||
<div class="comment-markup-box" id="mb<%id%>">\
|
||||
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
|
||||
<tt>``code``</tt>, \
|
||||
code blocks: <tt>::</tt> and an indented block after blank line</div>\
|
||||
<form method="post" id="cf<%id%>" class="comment-form" action="">\
|
||||
<textarea name="comment" cols="80"></textarea>\
|
||||
<p class="propose-button">\
|
||||
<a href="#" id="pc<%id%>" class="show-propose-change">\
|
||||
Propose a change ▹\
|
||||
</a>\
|
||||
<a href="#" id="hc<%id%>" class="hide-propose-change">\
|
||||
Propose a change ▿\
|
||||
</a>\
|
||||
</p>\
|
||||
<textarea name="proposal" id="pt<%id%>" cols="80"\
|
||||
spellcheck="false"></textarea>\
|
||||
<input type="submit" value="Add comment" />\
|
||||
<input type="hidden" name="node" value="<%id%>" />\
|
||||
<input type="hidden" name="parent" value="" />\
|
||||
</form>\
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
var commentTemplate = '\
|
||||
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
|
||||
<div class="vote">\
|
||||
<div class="arrow">\
|
||||
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
|
||||
<img src="<%upArrow%>" />\
|
||||
</a>\
|
||||
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
|
||||
<img src="<%upArrowPressed%>" />\
|
||||
</a>\
|
||||
</div>\
|
||||
<div class="arrow">\
|
||||
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
|
||||
<img src="<%downArrow%>" id="da<%id%>" />\
|
||||
</a>\
|
||||
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
|
||||
<img src="<%downArrowPressed%>" />\
|
||||
</a>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="comment-content">\
|
||||
<p class="tagline comment">\
|
||||
<span class="user-id"><%username%></span>\
|
||||
<span class="rating"><%pretty_rating%></span>\
|
||||
<span class="delta"><%time.delta%></span>\
|
||||
</p>\
|
||||
<div class="comment-text comment"><#text#></div>\
|
||||
<p class="comment-opts comment">\
|
||||
<a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\
|
||||
<a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\
|
||||
<a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\
|
||||
<a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\
|
||||
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
|
||||
<span id="cm<%id%>" class="moderation hidden">\
|
||||
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
|
||||
</span>\
|
||||
</p>\
|
||||
<pre class="proposal" id="pr<%id%>">\
|
||||
<#proposal_diff#>\
|
||||
</pre>\
|
||||
<ul class="comment-children" id="cl<%id%>"></ul>\
|
||||
</div>\
|
||||
<div class="clearleft"></div>\
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
var replyTemplate = '\
|
||||
<li>\
|
||||
<div class="reply-div" id="rd<%id%>">\
|
||||
<form id="rf<%id%>">\
|
||||
<textarea name="comment" cols="80"></textarea>\
|
||||
<input type="submit" value="Add reply" />\
|
||||
<input type="button" value="Cancel" />\
|
||||
<input type="hidden" name="parent" value="<%id%>" />\
|
||||
<input type="hidden" name="node" value="" />\
|
||||
</form>\
|
||||
</div>\
|
||||
</li>';
|
||||
|
||||
$(document).ready(function() {
|
||||
init();
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
$(document).ready(function() {
|
||||
// add comment anchors for all paragraphs that are commentable
|
||||
$('.sphinx-has-comment').comment();
|
||||
|
||||
// highlight search words in search results
|
||||
$("div.context").each(function() {
|
||||
var params = $.getQueryParameters();
|
||||
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
|
||||
var result = $(this);
|
||||
$.each(terms, function() {
|
||||
result.highlightText(this.toLowerCase(), 'highlighted');
|
||||
});
|
||||
});
|
||||
|
||||
// directly open comment window if requested
|
||||
var anchor = document.location.hash;
|
||||
if (anchor.substring(0, 9) == '#comment-') {
|
||||
$('#ao' + anchor.substring(9)).click();
|
||||
document.location.hash = '#s' + anchor.substring(9);
|
||||
}
|
||||
});
|
@ -1,321 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Building Tesseract-OCR — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Programming with libtesseract" href="programming.html" />
|
||||
<link rel="prev" title="Setting up Tesseract-OCR" href="setup.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="programming.html" title="Programming with libtesseract"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="setup.html" title="Setting up Tesseract-OCR"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="building-tesseractocr">
|
||||
<h1>Building <strong>Tesseract-OCR</strong><a class="headerlink" href="#building-tesseractocr" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The Visual Studio 2008 Solution for <strong>Tesseract-OCR</strong> builds:</p>
|
||||
<ul>
|
||||
<li><p class="first"><span class="filesystem">libtesseract</span></p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">tesseract.exe</span></p>
|
||||
</li>
|
||||
<li><p class="first">9 training applications (for v3.02)</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Unlike earlier Solutions only a single <span class="filesystem">libtesseract</span> library is
|
||||
generated — the twelve projects matching the twelve source subfolders
|
||||
have been abandoned. They were deemed too complicated since they were
|
||||
never (rarely?) used by themselves, but only along with the entire
|
||||
library.</p>
|
||||
<p>In addition, <span class="filesystem">libtesseract</span> and <span class="filesystem">tesseract.exe</span> can be built using four
|
||||
configurations: <em class="guilabel">LIB_Release</em>, <em class="guilabel">LIB_Debug</em>,
|
||||
<em class="guilabel">DLL_Release</em>, and <em class="guilabel">DLL_Debug</em>.</p>
|
||||
<p>Two Visual Studio Property Sheets, <span class="filesystem">leptonica_versionnumbers.vsprops</span>
|
||||
and <span class="filesystem">tesseract_versionnumbers.vsprops</span>, are employed to isolate the
|
||||
Solution from changes in dependency version numbers (and isolate
|
||||
dependent Solutions). See <a class="reference internal" href="programming.html#apitest"><em>APITest’s</em></a> <a class="reference internal" href="programming.html#apitest-lib-release"><em>LIB_Release</em></a> Linker <em class="guilabel">Additional Dependencies</em>
|
||||
settings for an example of what this looks like in practice. See
|
||||
<strong>Leptonica</strong>’s explanation <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/downloading-binaries.html#about-version-numbers">About version numbers in library filenames</a>
|
||||
for the rationale behind using Property Sheets.</p>
|
||||
<div class="section" id="building-libtesseract-and-tesseract-exe">
|
||||
<h2>Building <span class="filesystem">libtesseract</span> and <span class="filesystem">tesseract.exe</span><a class="headerlink" href="#building-libtesseract-and-tesseract-exe" title="Permalink to this headline">¶</a></h2>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Open <span class="filesystem">C:\BuildFolder\tesseract-3.0x\vs2008\tesseract.sln</span> in Visual
|
||||
Studio 2008.</p>
|
||||
<p>You’ll see the following projects in the <em class="guilabel">Solution
|
||||
Explorer</em> (for v3.02):</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>ambiguous_words
|
||||
classifier_tester
|
||||
cntraining
|
||||
combine_tessdata
|
||||
dawg2wordlist
|
||||
libtesseract302
|
||||
mftraining
|
||||
shapeclustering
|
||||
tesseract
|
||||
unicharset_extractor
|
||||
wordlist2dawg
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Select the build configuration you’d like to use from the
|
||||
<em class="guilabel">Solution Configurations</em> dropdown. It lists the following
|
||||
configurations:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>DLL_Debug
|
||||
DLL_Release
|
||||
LIB_Debug
|
||||
LIB_Release
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The <span class="filesystem">DLL_</span> configurations build the DLL version of <span class="filesystem">libtesseract-3.0x</span>
|
||||
(and link with the DLL version of Leptonica 1.68). The <span class="filesystem">LIB_</span>
|
||||
configurations build the static library version of <span class="filesystem">libtesseract-3.0x</span>
|
||||
(and link with the static version of Leptonica 1.68 and the required
|
||||
image libraries).</p>
|
||||
</li>
|
||||
<li><p class="first">Build <span class="filesystem">libtesseract</span> by right-clicking the
|
||||
<em class="guilabel">libtesseract30x</em> project and choosing
|
||||
<em class="menuselection">B<span class="accelerator">u</span>ild</em> from the pop-up menu.</p>
|
||||
<p>The resultant library will be written to the
|
||||
<span class="filesystem">C:\BuildFolder\tesseract-3.0x\vs2008\<ConfigurationName></span> directory
|
||||
where <span class="filesystem"><ConfigurationName></span> is the same as the build configuration you
|
||||
selected earlier. It is also copied to the <span class="filesystem">C:\BuildFolder\lib</span> folder
|
||||
to make it easy to link your own applications to <span class="filesystem">libtesseract</span>.</p>
|
||||
<p>The library is named as follows (for v3.02):</p>
|
||||
<pre class="literal-block">
|
||||
static libraries:
|
||||
|
||||
<span class="filesystem">libtesseract302-static.lib</span>
|
||||
<span class="filesystem">libtesseract302-static-debug.lib</span>
|
||||
|
||||
DLLs:
|
||||
|
||||
<span class="filesystem">libtesseract302.lib</span> (import library)
|
||||
<span class="filesystem">libtesseract302.dll</span>
|
||||
<span class="filesystem">libtesseract302d.lib</span> (import library)
|
||||
<span class="filesystem">libtesseract302d.dll</span>
|
||||
</pre>
|
||||
</li>
|
||||
<li><p class="first">Build the main tesseract OCR application by right-clicking the
|
||||
<em class="guilabel">tesseract</em> project and choosing <em class="menuselection">B<span class="accelerator">u</span>ild</em>.</p>
|
||||
<p>The resultant executable will be written to the
|
||||
<span class="filesystem">C:\BuildFolder\tesseract-3.0x\vs2008\<ConfigurationName></span> directory
|
||||
where <span class="filesystem"><ConfigurationName></span> is the same as the build configuration you
|
||||
selected earlier. It is named as follows:</p>
|
||||
<pre class="literal-block">
|
||||
LIB_Release: <span class="filesystem">tesseract.exe</span>
|
||||
LIB_Debug: <span class="filesystem">tesseractd.exe</span>
|
||||
DLL_Release: <span class="filesystem">tesseract-dll.exe</span>
|
||||
DLL_Debug: <span class="filesystem">tesseract-dlld.exe</span>
|
||||
</pre>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="testing-tesseract-exe">
|
||||
<h2>Testing <span class="filesystem">tesseract.exe</span><a class="headerlink" href="#testing-tesseract-exe" title="Permalink to this headline">¶</a></h2>
|
||||
<p>It’s usually better to make a separate directory to test
|
||||
<span class="filesystem">tesseract.exe</span>. To run tesseract, you either need to make sure your
|
||||
test directory contains the <span class="filesystem">tessdata</span> tesseract language data folder or
|
||||
you set the <tt class="docutils literal"><span class="pre">TESSDATA_PREFIX</span></tt> environment variable to point to it. See
|
||||
<a class="reference external" href="http://code.google.com/p/tesseract-ocr/wiki/ReadMe">http://code.google.com/p/tesseract-ocr/wiki/ReadMe</a> for important
|
||||
details.</p>
|
||||
<p>For example, you can use the following directory structure:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\
|
||||
include\
|
||||
lib\
|
||||
tesseract-3.02\
|
||||
testing\
|
||||
tessdata\
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Copy your tesseract executable to <span class="filesystem">C:\BuildFolder\testing</span>. If you
|
||||
built a DLL version then be sure to also copy the required DLLs to the
|
||||
same directory (or add <span class="filesystem">C:\BuildFolder\lib</span> to your <tt class="docutils literal"><span class="pre">PATH</span></tt> –
|
||||
However, this isn’t really recommended).</p>
|
||||
<p>For example, if you are trying to run <span class="filesystem">tesseractd.exe</span> then you’ll need
|
||||
to also copy the following to <span class="filesystem">C:\BuildFolder\testing</span>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>liblept168d.dll
|
||||
libtesseract302d.dll
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Copy a few test images to <span class="filesystem">C:\BuildFolder\testing</span> just to make it easy
|
||||
to run test commands.</p>
|
||||
<p>Test tesseract by doing something like the following:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>tesseractd.exe eurotext.tif eurotext
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This will create a file called <span class="filesystem">eurotext.txt</span> that will contain the
|
||||
result of OCRing <span class="filesystem">eurotext.tif</span>.</p>
|
||||
</div>
|
||||
<div class="section" id="building-the-training-applications">
|
||||
<h2>Building the training applications<a class="headerlink" href="#building-the-training-applications" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The training related applications are built using the following
|
||||
projects:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>ambiguous_words
|
||||
classifier_tester
|
||||
cntraining
|
||||
combine_tessdata
|
||||
dawg2wordlist
|
||||
mftraining
|
||||
shapeclustering
|
||||
unicharset_extractor
|
||||
wordlist2dawg
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">Currently these applications can <strong>ONLY</strong> be built with the LIB_Debug
|
||||
and LIB_Release configurations. If you try to use a DLL configuration
|
||||
you’ll get “undefined external symbol” errors.</p>
|
||||
</div>
|
||||
<p>To build one of the above training applications, simply right-click one
|
||||
of the projects in the Solution Explorer, and choose
|
||||
<em class="menuselection">B<span class="accelerator">u</span>ild</em> from the pop-up menu.</p>
|
||||
<p>Alternatively, you can build <em class="bold-italic">everything</em> in the Solution by
|
||||
choosing <em class="menuselection"><span class="accelerator">B</span>uild ‣ <span class="accelerator">B</span>uild Solution</em> (<tt class="kbd docutils literal"><span class="pre">Ctrl+Shift+B</span></tt>)
|
||||
from the menu bar.</p>
|
||||
<p>See <a class="reference external" href="http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3">http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3</a> for
|
||||
more information on using these applications.</p>
|
||||
</div>
|
||||
<div class="section" id="building-tesseractocr-with-visual-c-2008-express-edition">
|
||||
<span id="building-with-vc2008-express"></span><h2>Building <strong>Tesseract-OCR</strong> with Visual C++ 2008 Express Edition<a class="headerlink" href="#building-tesseractocr-with-visual-c-2008-express-edition" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The Solution file that comes with <strong>Tesseract-OCR</strong> was created with Visual
|
||||
Studio 2008, and is compatible for the most part with the free <a class="reference external" href="http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express">Visual
|
||||
C++ 2008 Express Edition</a>. You
|
||||
might, however, sometimes see the following error message:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>Fatal error RC1015: cannot open include file 'afxres.h'
|
||||
</pre></div>
|
||||
</div>
|
||||
<p id="version-resource">The Solution uses resource files to set application and DLL properties
|
||||
that are visible on Windows 7 when you right-click them in Windows
|
||||
Explorer, choose <em class="menuselection">Properties</em>, and look at the
|
||||
<em class="guilabel">Details</em> tab (the <em class="guilabel">Version</em> tab on Windows XP).</p>
|
||||
<blockquote>
|
||||
<div><img alt="Windows 7 Properties' Details Tab" class="align-center" src="_images/dll_properties_details_tab.png" />
|
||||
</div></blockquote>
|
||||
<p>Unfortunately, the Express Edition doesn’t include the Resource
|
||||
Editor. So in all resource files:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>#include "afxres.h"
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>has to be changed to:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>#include "windows.h"
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If someone has used the VS2008 Resource Editor to change a <span class="filesystem">.rc</span> file
|
||||
associated with an application or DLL and forgotten to make these
|
||||
changes before checking the file in, you’ll see the above “Fatal error”
|
||||
message. Simply manually make the change to fix the error.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Building <strong>Tesseract-OCR</strong></a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#building-libtesseract-and-tesseract-exe">Building <span class="filesystem">libtesseract</span> and <span class="filesystem">tesseract.exe</span></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#testing-tesseract-exe">Testing <span class="filesystem">tesseract.exe</span></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#building-the-training-applications">Building the training applications</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#building-tesseractocr-with-visual-c-2008-express-edition">Building <strong>Tesseract-OCR</strong> with Visual C++ 2008 Express Edition</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="programming.html" title="Programming with libtesseract"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="setup.html" title="Setting up Tesseract-OCR"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,170 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Visual Studio 2008 Developer Notes for Tesseract-OCR — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="#" />
|
||||
<link rel="next" title="Overview" href="overview.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="overview.html" title="Overview"
|
||||
accesskey="N">next</a></li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="#">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="visual-studio-2008-developer-notes-for-tesseractocr">
|
||||
<span id="vs2008-developer-notes"></span><h1>Visual Studio 2008 Developer Notes for <strong>Tesseract-OCR</strong><a class="headerlink" href="#visual-studio-2008-developer-notes-for-tesseractocr" title="Permalink to this headline">¶</a></h1>
|
||||
<table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field-odd field"><th class="field-name">date:</th><td class="field-body">February 23, 2012</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="setup.html#initial-build-directory-setup">Initial “Build” directory setup</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="setup.html#using-the-latest-tesseractocr-sources">Using the latest <strong>Tesseract-OCR</strong> sources</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="building.html#building-libtesseract-and-tesseract-exe">Building <span class="filesystem">libtesseract</span> and <span class="filesystem">tesseract.exe</span></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="building.html#testing-tesseract-exe">Testing <span class="filesystem">tesseract.exe</span></a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="building.html#building-the-training-applications">Building the training applications</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="building.html#building-tesseractocr-with-visual-c-2008-express-edition">Building <strong>Tesseract-OCR</strong> with Visual C++ 2008 Express Edition</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="programming.html#debugging-tips">Debugging Tips</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="programming.html#apitest-sample">APITest Sample</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="programming.html#apiexamples">APIExamples</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="programming.html#tesseractocr-preprocessor-definitions"><strong>Tesseract-OCR</strong> preprocessor definitions</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id1">TortoiseSVN</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id2">JP Software TCC/LE</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id4">Cygwin</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id7">MSYS</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#windiff">WinDiff</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id9">IrfanView</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id10">Aware Systems AsTiffTagViewer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id11">Dependency Walker</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id12">Sysinternals Process Explorer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="tools.html#id13">VMware Player</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#the-tesshelper-py-python-script">The <span class="filesystem">tesshelper.py</span> Python script</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#generating-the-documentation">Generating the documentation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="maintenance.html#updating-the-vs2008-directory-for-new-releases-of-tesseractocr">Updating the VS2008 directory for new releases of <strong>Tesseract-OCR</strong></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="versions.html#february-2012">3.02 – February ??, 2012</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="overview.html" title="Overview"
|
||||
>next</a></li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="#">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,350 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Maintaining the VS2008 directory — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Using Visual Studio 2010" href="vs2010-notes.html" />
|
||||
<link rel="prev" title="Handy free tools" href="tools.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="vs2010-notes.html" title="Using Visual Studio 2010"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="tools.html" title="Handy free tools"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="maintaining-the-vs2008-directory">
|
||||
<h1>Maintaining the VS2008 directory<a class="headerlink" href="#maintaining-the-vs2008-directory" title="Permalink to this headline">¶</a></h1>
|
||||
<p>This section is geared towards project maintainers of the
|
||||
<span class="filesystem">tesseract-3.0x\vs2008</span> directory, rather than users of it.</p>
|
||||
<p>Python 2.7.x (<em>not</em> 3.x) is required for this section. The recommended
|
||||
version is the <a class="reference external" href="http://www.activestate.com/activepython/downloads">latest from ActiveState</a>.</p>
|
||||
<div class="section" id="the-tesshelper-py-python-script">
|
||||
<span id="tesshelper"></span><h2>The <span class="filesystem">tesshelper.py</span> Python script<a class="headerlink" href="#the-tesshelper-py-python-script" title="Permalink to this headline">¶</a></h2>
|
||||
<p><span class="filesystem">tesshelper.py</span> performs a number of useful maintenance related
|
||||
operations on the <span class="filesystem">tesseract-3.0x\vs2008</span> directory. To run it, first
|
||||
open a Command Prompt window and navigate to the <span class="filesystem"><tesseract install
|
||||
dir>\vs2008</span> directory.</p>
|
||||
<p>Then entering the following command:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>python tesshelper.py --help
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>displays the following help message:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>usage: tesshelper.py [-h] [--version] tessDir {compare,report,copy,clean} ...
|
||||
|
||||
positional arguments:
|
||||
tessDir tesseract installation directory
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--version show program's version number and exit
|
||||
|
||||
Commands:
|
||||
{compare,report,copy,clean}
|
||||
compare compare libtesseract Project with tessDir
|
||||
report report libtesseract summary stats
|
||||
copy copy public libtesseract header files to includeDir
|
||||
clean clean vs2008 folder of build folders and .user files
|
||||
|
||||
Examples:
|
||||
|
||||
Assume that tesshelper.py is in c:\buildfolder\tesseract-3.01\vs2008,
|
||||
which is also the current directory. Then,
|
||||
|
||||
python tesshelper .. compare
|
||||
|
||||
will compare c:\buildfolder\tesseract-3.01 "library" directories to the
|
||||
libtesseract Project
|
||||
(c:\buildfolder\tesseract-3.01\vs2008\libtesseract\libtesseract.vcproj).
|
||||
|
||||
python tesshelper .. report
|
||||
|
||||
will display summary stats for c:\buildfolder\tesseract-3.01 "library"
|
||||
directories and the libtesseract Project.
|
||||
|
||||
python tesshelper .. copy ..\..\include
|
||||
|
||||
will copy all "public" libtesseract header files to
|
||||
c:\buildfolder\include.
|
||||
|
||||
python tesshelper .. clean
|
||||
|
||||
will clean the vs2008 folder of all build directories, and .user, .suo,
|
||||
.ncb, and other temp files.
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="generating-the-documentation">
|
||||
<h2>Generating the documentation<a class="headerlink" href="#generating-the-documentation" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The source files for the documentation you are currently reading are
|
||||
written in <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> and processed with the
|
||||
<a class="reference external" href="http://sphinx.pocoo.org/index.html">Sphinx Python Documentation Generator</a>.</p>
|
||||
<p>To install Sphinx, go to your <span class="filesystem"><python.2.7.x install dir>\scripts</span>
|
||||
directory and just do:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>easy_install -U Sphinx
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>which will download Sphinx and all its dependencies. [Note: This might
|
||||
<em>not</em> install the Python Imaging Library. If not, then also do
|
||||
<tt class="docutils literal"><span class="pre">easy_install</span> <span class="pre">-U</span> <span class="pre">PIL</span></tt> or download it from <a class="reference external" href="http://www.pythonware.com/products/pil/">here</a>.]</p>
|
||||
<p>To generate this <strong>Tesseract-OCR</strong> VS2008 documentation go to
|
||||
<span class="filesystem">tesseract-3.0x\vs2008\Sphinx</span> and do:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>make clean
|
||||
make html
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Which will create a number of items in
|
||||
<span class="filesystem">tesseract-3.0x\vs2008\Sphinx\_build\html</span>.</p>
|
||||
<p>Copy everything there to the distribution’s <span class="filesystem">tesseract-3.0x\vs2008\doc</span>
|
||||
folder, <em class="bold-italic">except</em> for:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>.buildinfo
|
||||
objects.inv
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="updating-the-vs2008-directory-for-new-releases-of-tesseractocr">
|
||||
<span id="updating-vs2008-directory"></span><h2>Updating the VS2008 directory for new releases of <strong>Tesseract-OCR</strong><a class="headerlink" href="#updating-the-vs2008-directory-for-new-releases-of-tesseractocr" title="Permalink to this headline">¶</a></h2>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Change the version number strings in
|
||||
<span class="filesystem">tesseract-3.0x\vs2008\include\tesseract_versionnumbers.vsprops</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Change the version number in
|
||||
<span class="filesystem">tesseract-3.0x\vs2008\port\version.h</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Open up a Command Prompt window, and do the following:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>cd <tesseract-3.0x install dir>\vs2008
|
||||
python tesshelper .. compare
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This will list all added and missing items in the <span class="filesystem"><tesseract-3.0x install
|
||||
dir></span> directories that are used to build <span class="filesystem">libtesseract</span>. For the
|
||||
newly added items ignore:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>api\tesseractmain.cpp
|
||||
api\tesseractmain.h
|
||||
ccutil\scanutils.cpp
|
||||
ccutil\scanutils.h
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>and for the newly missing items ignore:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>training\commontraining.cpp
|
||||
training\commontraining.h
|
||||
training\tessopt.cpp
|
||||
training\tessopt.h
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Open up the <span class="filesystem">tesseract.sln</span> in Visual Studio 2008 (or Visual C++ 2008
|
||||
Express Edition but see <a class="reference internal" href="building.html#building-with-vc2008-express"><em>this</em></a> first).</p>
|
||||
<ol class="loweralpha">
|
||||
<li><p class="first">In the Solution Explorer, rename the <em class="guilabel">libtesseract-3.0x</em>
|
||||
Project to the correct version number to make it obvious which
|
||||
version of <strong>Tesseract-OCR</strong> this Solution is for.</p>
|
||||
</li>
|
||||
<li><p class="first">Remove the missing items from the <em class="guilabel">libtesseract-3.0x</em> Project.</p>
|
||||
</li>
|
||||
<li><p class="first">Add the new items to the <em class="guilabel">libtesseract-3.0x</em> Project.</p>
|
||||
<p>If there were a lot of new items, you can use the <span class="filesystem">newheaders.txt</span>
|
||||
and <span class="filesystem">newsources.txt</span> files generated by running the
|
||||
<span class="filesystem">tesshelper.py</span> script with the <tt class="docutils literal"><span class="pre">compare</span></tt> command. Close the
|
||||
Solution, and then you can directly edit
|
||||
<span class="filesystem">libtesseract\libtesseract.vcproj</span> to add them to the appropriate
|
||||
<tt class="docutils literal"><span class="pre"><Filter></span> <span class="pre">...</span> <span class="pre"></Filter></span></tt> section (either <tt class="docutils literal"><span class="pre">Header</span> <span class="pre">Files</span></tt> or
|
||||
<tt class="docutils literal"><span class="pre">Source</span> <span class="pre">Files</span></tt>).</p>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><p class="first">With the Solution closed, use a text editor to change all the
|
||||
Project’s <span class="filesystem">.rc</span> files to reflect the new version.</p>
|
||||
<p>If you have a program like the <em>non-free</em> <a class="reference external" href="http://www.powergrep.com/">PowerGrep</a>, you can use it to change all the
|
||||
<span class="filesystem">.rc</span> files in one fell swoop.</p>
|
||||
<p>Alternatively, you can edit the Version resources within Visual
|
||||
Studio 2008 (but <em>not</em> Visual C++ 2008 Express Edition) and then
|
||||
manually make the changes mentioned <a class="reference internal" href="building.html#building-with-vc2008-express"><em>here</em></a> afterwards.</p>
|
||||
</li>
|
||||
<li id="copying-a-project"><p class="first">If a new training application was added (edit
|
||||
<span class="filesystem">tesseract-3.0x\training\Makefile.am</span> and look at the
|
||||
<tt class="docutils literal"><span class="pre">bin_PROGRAMS</span></tt> variable to see the list), the easiest thing to do
|
||||
is copy another existing training application Project and manually
|
||||
change it.</p>
|
||||
<p>For example, assuming the new training application is
|
||||
called <span class="filesystem">new_trainer.exe</span>, with the Solution closed:</p>
|
||||
<ol class="loweralpha">
|
||||
<li><p class="first">Copy the <span class="filesystem">ambiguous_words</span> directory to a new directory called
|
||||
<span class="filesystem">new_trainer</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Change the <span class="filesystem">new_trainer\ambiguous_words.rc</span> filename to
|
||||
<span class="filesystem">new_trainer\new_trainer.rc</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Change the <span class="filesystem">new_trainer\ambiguous_words.vcproj</span> filename to
|
||||
<span class="filesystem">new_trainer\new_trainer.vcproj</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Edit <span class="filesystem">new_trainer\new_trainer.rc</span> and change all occurrences of
|
||||
<tt class="docutils literal"><span class="pre">ambiguous_words</span></tt> to <tt class="docutils literal"><span class="pre">new_trainer</span></tt>.</p>
|
||||
<p>Also change <tt class="docutils literal"><span class="pre">FileDescription</span></tt> to describe the new application.</p>
|
||||
</li>
|
||||
<li><p class="first">Open up the <strong>Tesseract-OCR</strong> Solution file and right-click the
|
||||
<em class="guilabel">Solution:’tesseract’</em> in the Solution Explorer. Choose
|
||||
<em class="menuselection">A<span class="accelerator">d</span>d ‣ <span class="accelerator">E</span>xisting Project...</em> from the context
|
||||
menu and add the <span class="filesystem">new_trainer\new_trainer.vcproj</span> you just
|
||||
created.</p>
|
||||
</li>
|
||||
<li><p class="first">Right-click the newly added Project, and choose
|
||||
<em class="menuselection">Project Dependencie<span class="accelerator">s</span>...</em>.</p>
|
||||
<p>The <em class="guilabel">Project Dependencies</em> Dialog will open. Make sure
|
||||
that <span class="filesystem">libtesseract30x</span> is checked. If you forget this step, Visual
|
||||
Studio will not automatically link with <span class="filesystem">libtesseract</span> and
|
||||
you’ll get lots of “unresolved external symbol” errors.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>This actually goes pretty fast. It should only take you a minute or
|
||||
so to add a new application to the <strong>Tesseract-OCR</strong> Solution.</p>
|
||||
</li>
|
||||
<li><p class="first">(Optional?) Edit <span class="filesystem">vs2008\Sphinx\versions.rst</span> and add a new entry
|
||||
describing the changes made for this new version.</p>
|
||||
</li>
|
||||
<li><p class="first">To make your working directory suitable for reposting back to the
|
||||
<strong>Tesseract-OCR</strong> SVN repository, you need to ignore all the following:</p>
|
||||
<ul>
|
||||
<li><p class="first">All <span class="filesystem">LIB_Release</span>, <span class="filesystem">LIB_Debug</span>, <span class="filesystem">DLL_Release</span>, <span class="filesystem">DLL_Debug</span>
|
||||
directories</p>
|
||||
</li>
|
||||
<li><p class="first">All <span class="filesystem">.suo</span> files</p>
|
||||
</li>
|
||||
<li><p class="first">All <span class="filesystem">.user</span> files</p>
|
||||
</li>
|
||||
<li><p class="first">All <span class="filesystem">.ncb</span> files</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">vs2008\newheaders.txt</span></p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">vs2008\newsources.txt</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Optionally, the <span class="filesystem">tesshelper.py</span> script has the <tt class="docutils literal"><span class="pre">clean</span></tt> command
|
||||
which will remove the above items. To run it, open a Command Prompt
|
||||
window and then do:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>cd <tesseract-3.0x install dir>\vs2008
|
||||
python tesshelper .. clean
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The script will respond with the following:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>Are you sure you want to clean the
|
||||
"C:\BuildFolder\tesseract-3.0x\vs2008" folder (Yes/No) [No]? yes
|
||||
Only list the items to be deleted (Yes/No) [Yes]? no
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You have to answer <tt class="docutils literal"><span class="pre">yes</span></tt> and then <tt class="docutils literal"><span class="pre">no</span></tt> to the prompts. Otherwise
|
||||
either the script will just exit, or only list the items that will be
|
||||
removed instead of actually removing them (which is a good thing to
|
||||
try first just in case).</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Maintaining the VS2008 directory</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#the-tesshelper-py-python-script">The <span class="filesystem">tesshelper.py</span> Python script</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#generating-the-documentation">Generating the documentation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#updating-the-vs2008-directory-for-new-releases-of-tesseractocr">Updating the VS2008 directory for new releases of <strong>Tesseract-OCR</strong></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="vs2010-notes.html" title="Using Visual Studio 2010"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="tools.html" title="Handy free tools"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,188 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Overview — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Setting up Tesseract-OCR" href="setup.html" />
|
||||
<link rel="prev" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="setup.html" title="Setting up Tesseract-OCR"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="index.html" title="Visual Studio 2008 Developer Notes for Tesseract-OCR"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="overview">
|
||||
<h1>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The recommended audience for this document are developers who want to
|
||||
use Microsoft Visual Studio 2008 with <a class="reference external" href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR</a>. If you simply want to <em>run</em>
|
||||
<span class="filesystem">tesseract</span> or its various language training applications, then see the
|
||||
<a class="reference external" href="http://code.google.com/p/tesseract-ocr/wiki/ReadMe">ReadMe</a>. You’ll
|
||||
find instructions there on how to download tesseract’s Windows
|
||||
installer.</p>
|
||||
<p><strong>Tesseract-OCR</strong> consists of:</p>
|
||||
<ul>
|
||||
<li><p class="first"><span class="filesystem">libtesseract</span> – the static (or dynamic) library that does all the
|
||||
actual work. As of February 2012 it consists of 260+ <span class="filesystem">C++</span> files
|
||||
along with 290+ header files.</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">tesseract.exe</span> – the command-line OCR engine. It’s built from a
|
||||
single, small <span class="filesystem">C++</span> file that just calls functions in
|
||||
<span class="filesystem">libtesseract</span>. There currently isn’t very much documentation on how
|
||||
to use <span class="filesystem">tesseract.exe</span>, but you can look at what’s there in the
|
||||
repository’s <a class="reference external" href="http://code.google.com/p/tesseract-ocr/source/browse/#svn%2Ftrunk%2Fdoc">doc</a>
|
||||
subdirectory.</p>
|
||||
</li>
|
||||
<li><p class="first">Language packs – needed by <span class="filesystem">tesseract.exe</span> in order to recognize
|
||||
particular languages.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul id="training-applications">
|
||||
<li><p class="first">Language training applications – used to teach <span class="filesystem">tesseract.exe</span> new
|
||||
languages. Each has their own (very brief) man page in the <a class="reference external" href="http://code.google.com/p/tesseract-ocr/source/browse/#svn%2Ftrunk%2Fdoc">doc</a>
|
||||
subdirectory and include:</p>
|
||||
<ul>
|
||||
<li><p class="first"><span class="filesystem">ambiguous_words.exe</span> – generate sets of words Tesseract is likely
|
||||
to find ambiguous</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">classifier_tester</span> – tests a Tesseract character classifier on
|
||||
data as formatted for training</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">cntraining.exe</span> – character normalization training</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">combine_tessdata.exe</span> – combine/extract/overwrite Tesseract data</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">dawg2wordlist.exe</span> – convert a Tesseract DAWG to a wordlist</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">mftraining.exe</span> – feature training</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">shapeclustering.exe</span> – shape clustering training</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">unicharset_extractor.exe</span> – extract unicharset from Tesseract
|
||||
boxfiles</p>
|
||||
</li>
|
||||
<li><p class="first"><span class="filesystem">wordlist2dawg.exe</span> – convert a wordlist to a DAWG</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Their use is described in the <a class="reference external" href="http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3">TrainingTesseract3</a>
|
||||
Wiki page.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>This document explains how to:</p>
|
||||
<ul>
|
||||
<li><p class="first"><a class="reference internal" href="setup.html"><em>Setup</em></a> the proper directory structure required to use
|
||||
the supplied Visual Studio 2008 Solution</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><p class="first"><a class="reference internal" href="building.html"><em>Build</em></a> <span class="filesystem">libtesseract</span>, <span class="filesystem">tesseract.exe</span>, and the
|
||||
training apps</p>
|
||||
</li>
|
||||
<li><p class="first"><a class="reference internal" href="programming.html"><em>Write</em></a> programs that link with <span class="filesystem">libtesseract</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="setup.html" title="Setting up Tesseract-OCR"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="index.html" title="Visual Studio 2008 Developer Notes for Tesseract-OCR"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,548 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Programming with libtesseract — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Handy free tools" href="tools.html" />
|
||||
<link rel="prev" title="Building Tesseract-OCR" href="building.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="tools.html" title="Handy free tools"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="building.html" title="Building Tesseract-OCR"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="programming-with-libtesseract">
|
||||
<h1>Programming with <span class="filesystem">libtesseract</span><a class="headerlink" href="#programming-with-libtesseract" title="Permalink to this headline">¶</a></h1>
|
||||
<p>To use <span class="filesystem">libtesseract</span> in your own application you need to include
|
||||
<strong>Leptonica</strong>’s <span class="filesystem">allheaders.h</span>, and <strong>Tesseract-OCR</strong>’s <span class="filesystem">baseapi.h</span> and
|
||||
<span class="filesystem">strngs.h</span>.</p>
|
||||
<p><strong>Tesseract-OCR</strong> uses <span class="filesystem">liblept</span> mainly for image I/O, but you can also use
|
||||
any of <strong>Leptonica</strong>’s <em>many</em> image processing functions on <tt class="docutils literal"><span class="pre">PIX</span></tt>,
|
||||
while at the same time calling <tt class="docutils literal"><span class="pre">TessBaseAPI</span></tt> methods. See the
|
||||
<a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/">Leptonica documentation</a>
|
||||
for more details.</p>
|
||||
<p>There doesn’t seem to be any documentation on <span class="filesystem">api\baseapi.h</span>, but it
|
||||
has extensive comments. You can also look at the <a class="reference internal" href="#apitest"><em>APITest Sample</em></a> and
|
||||
<a class="reference internal" href="#apiexamples"><em>APIExamples</em></a> projects.</p>
|
||||
<p>See the <a class="reference internal" href="#apitest"><em>APITest Sample</em></a> project for an example of which compiler and
|
||||
linker settings you need for various build configurations. The easiest
|
||||
way to begin a new application is to just make a copy of the <span class="filesystem">APITest</span>
|
||||
directory. See <a class="reference internal" href="maintenance.html#copying-a-project"><em>this step</em></a> for detailed
|
||||
instructions (skip the last step about adding <em class="guilabel">Project
|
||||
Dependencies</em>).</p>
|
||||
<p>If you want to manually set the required settings, then here’s the list
|
||||
of things to do:</p>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Add the following <em class="guilabel">Preprocessor Definitions</em> when compiling
|
||||
any files that include <span class="filesystem">baseapi.h</span> and you are linking with the
|
||||
static library versions of <span class="filesystem">libtesseract</span>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>USE_STD_NAMESPACE
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you are linking with the DLL versions of <span class="filesystem">libtesseract</span> instead
|
||||
add:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>USE_STD_NAMESPACE;TESSDLL_IMPORTS;CCUTIL_IMPORTS;LIBLEPT_IMPORTS
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Be sure to add the following to <em class="guilabel">Additional Include
|
||||
Directories</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\include
|
||||
C:\BuildFolder\include\leptonica
|
||||
|
||||
C:\BuildFolder\include\tesseract or
|
||||
|
||||
<tesseract-3.0x dir> (all its sub-directories that contain header files)
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Add <span class="filesystem">C:\BuildFolder\lib</span> to your <em class="guilabel">Additional Library
|
||||
Directories</em>.</p>
|
||||
</li>
|
||||
<li><p class="first">In the <span class="filesystem">C:\BuildFolder\include</span> directory are two Visual Studio
|
||||
Property Sheet files:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>tesseract_versionnumbers.vsprops
|
||||
leptonica_versionnumbers.vsprops
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Using <span class="filesystem">tesseract_versionnumbers.vsprops</span> (which automatically inherits
|
||||
<span class="filesystem">leptonica_versionnumbers.vsprops</span>) can make it easier to specify the
|
||||
libraries you need to import. For example, when creating a staticly
|
||||
linked debug executable you can say:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>zlib$(ZLIB_VERSION)-static-mtdll-debug.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static-debug.lib
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>to make your application less dependent on library version numbers.</p>
|
||||
<p>To add the Property Sheet to a Project, open its <em class="guilabel">Properties
|
||||
Pages</em> Dialog, and set the <em class="guilabel">Configuration Properties |
|
||||
General | Inherited Project Property Sheets</em> item to:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>..\..\..\include\tesseract_versionnumbers.vsprops
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Choosing <em class="menuselection"><span class="accelerator">V</span>iew ‣ Oth<span class="accelerator">e</span>r Windows ‣ Property
|
||||
<span class="accelerator">M</span>anager</em> from the menubar will let you see the Properties attached
|
||||
to each Project’s configurations.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">The DLL versions of <span class="filesystem">libtesseract</span> currently only export the
|
||||
<tt class="docutils literal"><span class="pre">TessBaseAPI</span></tt> C++ class from <span class="filesystem">baseapi.h</span>, there is no C function
|
||||
interface yet.</p>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">The DLL versions of <span class="filesystem">libtesseract</span> currently only export the
|
||||
<tt class="docutils literal"><span class="pre">TessBaseAPI</span></tt> and <tt class="docutils literal"><span class="pre">STRING</span></tt> classes. In theory, all you need is
|
||||
are those classes. However, if you find yourself having to manipulate
|
||||
other “internal” tesseract objects then you currently have to link
|
||||
with the <strong>static library</strong> versions of <span class="filesystem">libtesseract</span>.</p>
|
||||
</div>
|
||||
<div class="admonition warning">
|
||||
<p class="first admonition-title">Warning</p>
|
||||
<p class="last">The Release versions of <span class="filesystem">liblept</span>, by design, <em>never</em> print out any
|
||||
possibly helpful messages to the console. Therefore, it is highly
|
||||
recommended that you do your initial development using the Debug
|
||||
versions of <span class="filesystem">liblept</span>. See <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/leptonica/README.html#compile-time-control-over-stderr-output">Compile-time control over stderr output</a>
|
||||
for details.</p>
|
||||
</div>
|
||||
<p><<<Need to add the URL of the zip file that contains include & lib
|
||||
directory contents for those people who don’t want to build libtesseract
|
||||
themselves>>></p>
|
||||
<div class="section" id="debugging-tips">
|
||||
<h2>Debugging Tips<a class="headerlink" href="#debugging-tips" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Before debugging programs written with <span class="filesystem">libtesseract</span>, you should first
|
||||
download the latest Leptonica sources (currently
|
||||
<span class="filesystem">leptonica-1.68.tar.gz</span>) and VS2008 source package (<span class="filesystem">vs2008-1.68.zip</span>)
|
||||
from:</p>
|
||||
<ul>
|
||||
<li><p class="first"><a class="reference external" href="http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68.tar.gz">http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68.tar.gz</a></p>
|
||||
</li>
|
||||
<li><p class="first"><a class="reference external" href="http://code.google.com/p/leptonica/downloads/detail?name=vs2008-1.68.zip">http://code.google.com/p/leptonica/downloads/detail?name=vs2008-1.68.zip</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Unpack them to <span class="filesystem">C:\BuildFolder</span> to get the following directory structure:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\
|
||||
include\
|
||||
lib\
|
||||
leptonica-1.68\
|
||||
vs2008\
|
||||
tesseract-3.02\
|
||||
vs2008\
|
||||
testing\
|
||||
tessdata\
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>(see <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/building-liblept.html">Building the liblept library</a>
|
||||
for more information)</p>
|
||||
<p><strong>Tesseract-OCR</strong> uses <strong>Leptonica</strong> “under the hood” for all (most? some?)
|
||||
of its image processing operations. Having the source available (and
|
||||
compiling it in debug mode) will make it easier to see what’s really
|
||||
going on.</p>
|
||||
<p>You might want to add
|
||||
<span class="filesystem">C:\BuildFolder\leptonica-1.68\vs2008\leptonica.vcproj</span> and
|
||||
<span class="filesystem">C:\BuildFolder\tesseract-3.02\vs2008\libtesseract\libtesseract.vcproj</span>
|
||||
to your solution by right-clicking it and choosing <em class="menuselection">A<span class="accelerator">d</span>d ‣
|
||||
<span class="accelerator">E</span>xisting Project...</em>. This seems to make VS2008’s Intellisense <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/building-other-programs.html#intellisense-and-liblept">work
|
||||
better</a>
|
||||
when finding “external” source files.</p>
|
||||
<p>Definitely create a <tt class="docutils literal"><span class="pre">TESSDATA_PREFIX``x</span> <span class="pre">environment</span> <span class="pre">variable</span> <span class="pre">so</span> <span class="pre">that</span> <span class="pre">it</span>
|
||||
<span class="pre">contains</span> <span class="pre">the</span> <span class="pre">absolute</span> <span class="pre">path</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">directory</span> <span class="pre">that</span> <span class="pre">contains</span> <span class="pre">the</span>
|
||||
<span class="pre">``tessdata</span></tt> directory. Otherwise you’ll have to put a <tt class="docutils literal"><span class="pre">tessdata</span></tt>
|
||||
directory in every temporary build folder which quickly becomes painful
|
||||
(especially since tessdata has gotten very big — 600MB!).</p>
|
||||
</div>
|
||||
<div class="section" id="apitest-sample">
|
||||
<span id="apitest"></span><h2>APITest Sample<a class="headerlink" href="#apitest-sample" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The <em class="guilabel">APITest</em> Solution contains the minimal settings needed to
|
||||
link with <span class="filesystem">libtesseract</span>. It demonstrates the typical situation, where
|
||||
the “external” application’s source files reside <em>outside</em> of the
|
||||
<span class="filesystem">tesseract-3.0x</span> directory tree.</p>
|
||||
<p>To build the <span class="filesystem">vs2008\APITest</span> Solution, first copy it to your
|
||||
<span class="filesystem">C:\BuildFolder</span> directory. This should now look like:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
tesseract\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtesseract302.dll
|
||||
libtesseract302.lib
|
||||
libtesseract302d.dll
|
||||
libtesseract302d.lib
|
||||
libtesseract302-static.lib
|
||||
libtesseract302-static-debug.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
tesseract-3.02\
|
||||
|
||||
APITest\
|
||||
baseapitester\
|
||||
baseapitester.cpp
|
||||
baseapitester.rc
|
||||
baseapitester.vcproj
|
||||
resource.h
|
||||
stdafx.cpp
|
||||
stdafx.h
|
||||
targetver.h
|
||||
APITest.sln
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The <em class="guilabel">APITest</em> contains just the <em class="guilabel">baseapitester</em>
|
||||
project. This was created using the VS2008 <em class="guilabel">Win32 Console
|
||||
Application</em> Project Wizard and then just copying most of
|
||||
<span class="filesystem">tesseractmain.cpp</span> and making minor edits. Its settings correctly refer
|
||||
to the “public” <span class="filesystem">include</span> and <span class="filesystem">lib</span> directories using relative paths.</p>
|
||||
<p>It assumes that the <span class="filesystem">C:\BuildFolder\include</span> directory has been
|
||||
properly setup. See <a class="reference internal" href="setup.html#copying-headers"><em>this</em></a> for more details.</p>
|
||||
<p>The <span class="filesystem">C:\BuildFolder\lib</span> directory will automatically get
|
||||
<span class="filesystem">libtesseract</span> copied to it whenever it is built.</p>
|
||||
<p>The <span class="filesystem">include\tesseract_versionnumbers.vsprops</span> Property Sheet is used
|
||||
to avoid explicit library version number dependencies. Precompiled
|
||||
headers are used. <em class="guilabel">LIB_Release</em>, <em class="guilabel">LIB_Debug</em>,
|
||||
<em class="guilabel">DLL_Release</em>, and <em class="guilabel">DLL_Debug</em> build configurations
|
||||
are supported.</p>
|
||||
<p>The following are the compiler command lines and linker options
|
||||
used. See <a class="reference external" href="http://msdn.microsoft.com/en-us/library/9s7c9wdw(v=vs.90).aspx">Compiling a C/C++ Program | Compiler Options</a> for a
|
||||
detailed explanation of these options.</p>
|
||||
<p id="apitest-lib-release"><em class="guilabel">LIB_Release</em> C/C++ <em class="guilabel">Command Line</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>/O2
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "NDEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/FD /EHsc /MD /Yc"stdafx.h"
|
||||
/Fp"LIB_Release\baseapitester.pch" /Fo"LIB_Release\\"
|
||||
/Fd"LIB_Release\vc90.pdb"
|
||||
/W3 /nologo /c
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">LIB_Release</em> Linker <em class="guilabel">Additional Dependencies</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>ws2_32.lib
|
||||
user32.lib
|
||||
zlib$(ZLIB_VERSION)-static-mtdll.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static.lib
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">LIB_Debug</em> C/C++ <em class="guilabel">Command Line</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>/Od
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "_DEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/FD /EHsc /RTC1 /MDd /Yc"stdafx.h"
|
||||
/Fp"LIB_Debug\baseapitesterd.pch" /Fo"LIB_Debug\\"
|
||||
/Fd"LIB_Debug\vc90.pdb"
|
||||
/W3 /nologo /c /Z7
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">LIB_Debug</em> Linker <em class="guilabel">Additional Dependencies</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>ws2_32.lib
|
||||
user32.lib
|
||||
zlib$(ZLIB_VERSION)-static-mtdll-debug.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static-debug.lib
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">DLL_Release</em> C/C++ <em class="guilabel">Command Line</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>/O2
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "NDEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/D "TESSDLL_IMPORTS" /D "CCUTIL_IMPORTS" /D "LIBLEPT_IMPORTS"
|
||||
/FD /EHsc /MD /Yc"stdafx.h"
|
||||
/Fp"DLL_Release\baseapitester-dll.pch" /Fo"DLL_Release\\"
|
||||
/Fd"DLL_Release\vc90.pdb"
|
||||
/W3 /nologo /c
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">DLL_Release</em> Linker <em class="guilabel">Additional Dependencies</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>ws2_32.lib
|
||||
user32.lib
|
||||
liblept$(LIBLEPT_VERSION).lib
|
||||
libtesseract$(LIBTESS_VERSION).lib
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">DLL_Debug</em> C/C++ <em class="guilabel">Command Line</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>/Od
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "_DEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/D "TESSDLL_IMPORTS" /D "CCUTIL_IMPORTS" /D "LIBLEPT_IMPORTS"
|
||||
/FD /EHsc /RTC1 /MDd /Yc"stdafx.h"
|
||||
/Fp"DLL_Debug\baseapitester-dlld.pch" /Fo"DLL_Debug\\"
|
||||
/Fd"DLL_Debug\vc90.pdb"
|
||||
/W3 /nologo /c /Z7
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><em class="guilabel">DLL_Debug</em> Linker <em class="guilabel">Additional Dependencies</em>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>ws2_32.lib
|
||||
user32.lib
|
||||
liblept$(LIBLEPT_VERSION)d.lib
|
||||
libtesseract$(LIBTESS_VERSION)d.lib
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="apiexamples">
|
||||
<span id="id1"></span><h2>APIExamples<a class="headerlink" href="#apiexamples" title="Permalink to this headline">¶</a></h2>
|
||||
<p><<<NEEDS WORK>>></p>
|
||||
<p>Currently two Projects are in this solution:</p>
|
||||
<ul>
|
||||
<li><p class="first">preprocessing – Demonstrates how to use <strong>Leptonica</strong>’s image
|
||||
processing functions to clean up images <em>before</em> calling
|
||||
<tt class="docutils literal"><span class="pre">TessBaseAPI::SetImage()</span></tt>.</p>
|
||||
</li>
|
||||
<li><p class="first">getinfo – Demonstrates calling various <tt class="docutils literal"><span class="pre">TessBaseAPI</span></tt> methods to get
|
||||
back information on the OCR process.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="tesseractocr-preprocessor-definitions">
|
||||
<h2><strong>Tesseract-OCR</strong> preprocessor definitions<a class="headerlink" href="#tesseractocr-preprocessor-definitions" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="docutils">
|
||||
<dt><tt class="docutils literal"><span class="pre">HAVE_CONFIG_H</span></tt></dt>
|
||||
<dd><p class="first">Only defined when building under Linux. This causes the inclusion of
|
||||
<span class="filesystem">config_auto.h</span>, which is only auto-generated during the <span class="filesystem">./configure</span>
|
||||
process and thus <em>not</em> visible on Windows.</p>
|
||||
<p class="last">This is what sets the <tt class="docutils literal"><span class="pre">VERSION</span></tt> macro (and lots of other
|
||||
configuration related macros).</p>
|
||||
</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">TESSDLL_EXPORTS</span></tt></dt>
|
||||
<dd>Only used when <em>building</em> DLL versions of <span class="filesystem">libtesseract</span>.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">TESSDLL_IMPORTS</span></tt></dt>
|
||||
<dd><p class="first">Should be defined when building apps that link to a DLL version of
|
||||
<span class="filesystem">libtesseract</span>. Used as follows in <span class="filesystem">baseapi.h</span>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>#ifdef TESSDLL_EXPORTS
|
||||
#define TESSDLL_API __declspec(dllexport)
|
||||
#elif defined(TESSDLL_IMPORTS)
|
||||
#define TESSDLL_API __declspec(dllimport)
|
||||
#else
|
||||
#define TESSDLL_API
|
||||
#endif
|
||||
</pre></div>
|
||||
</div>
|
||||
<p class="last">If you don’t define this then you’ll get “undefined external symbol”
|
||||
errors.</p>
|
||||
</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">TESSDLL_API</span></tt></dt>
|
||||
<dd>Used to mark classes for export (visibility) in DLL versions of
|
||||
<span class="filesystem">libtesseract</span>. Currently <em>only</em> used with the <tt class="docutils literal"><span class="pre">TestBaseAPI</span></tt> class.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">CCUTIL_EXPORTS</span></tt></dt>
|
||||
<dd>Only used when <em>building</em> DLL versions of <span class="filesystem">libtesseract</span>.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">CCUTIL_IMPORTS</span></tt></dt>
|
||||
<dd><p class="first">Should be defined when building apps that link to a DLL version of
|
||||
<span class="filesystem">libtesseract</span>. Used as follows in <span class="filesystem">strngs.h</span>:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>#ifdef CCUTIL_EXPORTS
|
||||
#define CCUTIL_API __declspec(dllexport)
|
||||
#elif defined(CCUTIL_IMPORTS)
|
||||
#define CCUTIL_API __declspec(dllimport)
|
||||
#else
|
||||
#define CCUTIL_API
|
||||
#endif
|
||||
</pre></div>
|
||||
</div>
|
||||
<p class="last">If you don’t define this then you’ll get “undefined external symbol STRING”
|
||||
errors.</p>
|
||||
</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">LIBLEPT_IMPORTS</span></tt></dt>
|
||||
<dd><p class="first">Should be defined when building apps that link to a DLL version of
|
||||
<strong>Leptonica</strong>. Used as follows in environ.h:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>#if defined(LIBLEPT_EXPORTS) || defined(LEPTONLIB_EXPORTS)
|
||||
#define LEPT_DLL __declspec(dllexport)
|
||||
#elif defined(LIBLEPT_IMPORTS) || defined(LEPTONLIB_IMPORTS)
|
||||
#define LEPT_DLL __declspec(dllimport)
|
||||
#else
|
||||
#define LEPT_DLL
|
||||
#endif
|
||||
</pre></div>
|
||||
</div>
|
||||
<p class="last">If you don’t define this then you’ll get “undefined external symbol”
|
||||
errors.</p>
|
||||
</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">USE_STD_NAMESPACE</span></tt></dt>
|
||||
<dd><p class="first">Causes the following to be done:</p>
|
||||
<div class="last highlight-none"><div class="highlight"><pre>#ifdef USE_STD_NAMESPACE
|
||||
using std::string;
|
||||
using std::vector;
|
||||
#endif
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">_WIN32</span></tt></dt>
|
||||
<dd><p class="first">Used to indicate that the build target is Windows 32-bit or
|
||||
64-bit (<tt class="docutils literal"><span class="pre">WIN32</span></tt> and <tt class="docutils literal"><span class="pre">WINDOWS</span></tt> are also added by the New Project
|
||||
Wizards).</p>
|
||||
<p class="last">See <a class="reference external" href="http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.90).aspx">C/C+ Preprocessor Reference | The Preprocessor | Macros |
|
||||
Predefined Macros</a> for
|
||||
the complete list for Visual Studio 2008.</p>
|
||||
</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">_MSC_VER</span></tt></dt>
|
||||
<dd>Used to check specifically for building with the VC++ compiler (as
|
||||
opposed to the MinGW gcc compiler).</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">_USRDLL</span></tt></dt>
|
||||
<dd>Only defined when building the DLL versions of <span class="filesystem">libtesseract</span>.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">_MBCS</span></tt></dt>
|
||||
<dd>Automatically defined when <em class="guilabel">Configuration Properties |
|
||||
General | Character Set</em> is set to <em class="guilabel">Use Multi-Byte
|
||||
Character Set</em>.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">DLLSYM</span></tt></dt>
|
||||
<dd><a class="reference external" href="http://groups.google.com/group/tesseract-dev/msg/5e0f7f7fab27b463">Obsolete</a>
|
||||
and can be ignored.</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Programming with <span class="filesystem">libtesseract</span></a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#debugging-tips">Debugging Tips</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#apitest-sample">APITest Sample</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#apiexamples">APIExamples</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#tesseractocr-preprocessor-definitions"><strong>Tesseract-OCR</strong> preprocessor definitions</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="tools.html" title="Handy free tools"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="building.html" title="Building Tesseract-OCR"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,119 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Search — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/searchtools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<script type="text/javascript">
|
||||
jQuery(function() { Search.loadIndex("searchindex.js"); });
|
||||
</script>
|
||||
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<h1 id="search-documentation">Search</h1>
|
||||
<div id="fallback" class="admonition warning">
|
||||
<script type="text/javascript">$('#fallback').hide();</script>
|
||||
<p>
|
||||
Please activate JavaScript to enable the search
|
||||
functionality.
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
From here you can search these documents. Enter your search
|
||||
words into the box below and click "search". Note that the search
|
||||
function will automatically search for all of the words. Pages
|
||||
containing fewer words won't appear in the result list.
|
||||
</p>
|
||||
<form action="" method="get">
|
||||
<input type="text" name="q" value="" />
|
||||
<input type="submit" value="search" />
|
||||
<span id="search-progress" style="padding-left: 10px"></span>
|
||||
</form>
|
||||
|
||||
<div id="search-results">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,371 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Setting up Tesseract-OCR — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Building Tesseract-OCR" href="building.html" />
|
||||
<link rel="prev" title="Overview" href="overview.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="building.html" title="Building Tesseract-OCR"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="overview.html" title="Overview"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="setting-up-tesseractocr">
|
||||
<h1>Setting up <strong>Tesseract-OCR</strong><a class="headerlink" href="#setting-up-tesseractocr" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The Visual Studio 2008 Solutions included with <strong>Tesseract-OCR</strong>, rely on
|
||||
<em>relative paths</em> to reference files and directories — including
|
||||
locations that are <em>outside</em> of the <span class="filesystem">tesseract-3.0x</span> tree. It is
|
||||
therefore vitally important to correctly set up the directories for the
|
||||
various components. This section describes how to do this.</p>
|
||||
<div class="section" id="initial-build-directory-setup">
|
||||
<span id="directory-setup"></span><h2>Initial “Build” directory setup<a class="headerlink" href="#initial-build-directory-setup" title="Permalink to this headline">¶</a></h2>
|
||||
<p>First create an empty directory where you will unpack all the required
|
||||
downloads. Assume you call this directory <span class="filesystem">C:\BuildFolder</span>.</p>
|
||||
<ol class="arabic" id="download-leptonica">
|
||||
<li><p class="first">Download the <strong>Leptonica</strong> 1.68 pre-built binary package
|
||||
(<span class="filesystem">leptonica-1.68-win32-lib-include-dirs.zip</span>) from:</p>
|
||||
<blockquote>
|
||||
<div><p><a class="reference external" href="http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip">http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip</a></p>
|
||||
</div></blockquote>
|
||||
<p>and unpack it to <span class="filesystem">C:\BuildFolder</span>.</p>
|
||||
</li>
|
||||
<li><p class="first"><strong>Leptonica</strong>, even on Windows as of v1.68, still requires a few unix
|
||||
utilities (like <span class="filesystem">rm</span>, <span class="filesystem">diff</span>, <span class="filesystem">sleep</span>). The easiest way to deal with
|
||||
this is to follow the instructions at <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-cygwin.html">Installing Cygwin coreutils</a>.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>At this point, if all you want to do is link with <span class="filesystem">libtesseract</span> you can
|
||||
<a class="reference external" href="http://code.google.com/p/tesseract-ocr/downloads/list">download</a> the
|
||||
file that just contains the “public” <strong>Tesseract-OCR</strong> headers along with
|
||||
the precompiled library binaries for Windows. Unpack it to
|
||||
<span class="filesystem">C:\BuildFolder</span> and you’ll now have:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
tesseract\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtesseract302.dll
|
||||
libtesseract302.lib
|
||||
libtesseract302d.dll
|
||||
libtesseract302d.lib
|
||||
libtesseract302-static.lib
|
||||
libtesseract302-static-debug.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>and you can skip the rest of this page and go directly to
|
||||
<a class="reference internal" href="programming.html"><em>Programming with libtesseract</em></a>.</p>
|
||||
<p>The recommended action, however, is to download the <strong>Tesseract-OCR</strong>
|
||||
sources and build them yourself. Therefore...</p>
|
||||
<ol class="arabic" start="3">
|
||||
<li><p class="first">Download the <strong>Tesseract-OCR</strong> Visual Studio 2008 source files from the
|
||||
<a class="reference external" href="http://code.google.com/p/tesseract-ocr/downloads/list">downloads page</a>. If, for
|
||||
example, you’d like to build v3.02 you would use the following link:</p>
|
||||
<blockquote>
|
||||
<div><p><a class="reference external" href="http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02-vs2008.zip">http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02-vs2008.zip</a></p>
|
||||
</div></blockquote>
|
||||
<p>Unpack the file to <span class="filesystem">C:\BuildFolder</span></p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>You would now have the following directory structure:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
tesseract-3.02\
|
||||
vs2008\
|
||||
ambiguous_words\
|
||||
classifier_tester\
|
||||
cntraining\
|
||||
combine_tessdata\
|
||||
dawg2wordlist\
|
||||
doc\
|
||||
include\
|
||||
libtesseract\
|
||||
libtesseract.vcproj
|
||||
mftraining\
|
||||
port\
|
||||
shapeclustering\
|
||||
sphinx\
|
||||
tesseract\
|
||||
tesseract.vcproj
|
||||
unicharset_extractor\
|
||||
wordlist2dawg\
|
||||
|
||||
tesseract.sln
|
||||
tesshelper.py
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic" start="4">
|
||||
<li><p class="first">Download the <strong>Tesseract-OCR</strong> source files for the same version as the
|
||||
VS2008 files you just unpacked. In this case, the proper link would
|
||||
be:</p>
|
||||
<blockquote>
|
||||
<div><p><a class="reference external" href="http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02.02.tar.gz">http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02.02.tar.gz</a></p>
|
||||
</div></blockquote>
|
||||
<p>Unpack the file to <span class="filesystem">C:\BuildFolder</span></p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>This will add a bunch of directories to your already existing
|
||||
<span class="filesystem">C:\BuildFolder\tesseract-3.0x</span> directory. You should now have (for
|
||||
v3.02):</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
lib\
|
||||
tesseract-3.02\
|
||||
api\
|
||||
ccmain\
|
||||
ccstruct\
|
||||
ccutil\
|
||||
classify\
|
||||
config\
|
||||
contrib\
|
||||
cube\
|
||||
cutil\
|
||||
dict\
|
||||
doc\
|
||||
image\
|
||||
java\
|
||||
image\
|
||||
neural_networks\
|
||||
tessdata\
|
||||
testing\
|
||||
textord\
|
||||
training\
|
||||
viewer\
|
||||
vs2008\
|
||||
wordrec\
|
||||
</pre></div>
|
||||
</div>
|
||||
<p id="copying-headers">If you are planning on writing applications that link with
|
||||
<strong>Tesseract-OCR</strong>, and you don’t want to add all the <span class="filesystem">tesseract-3.0x</span>
|
||||
directories to your project’s list of <tt class="docutils literal"><span class="pre">include</span></tt> directories, then do
|
||||
this additional step:</p>
|
||||
<ol class="arabic" start="5">
|
||||
<li><p class="first">Copy all the required headers to the “public” include folder.</p>
|
||||
<p>If you already have a <span class="filesystem">C:\BuildFolder\include\tesseract</span>
|
||||
directory you should delete it in case some of the files have been
|
||||
removed.</p>
|
||||
<p>Then use the python <span class="filesystem">tess-helper.py</span> script to copy (possibly updated
|
||||
versions of) the required headers by doing:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>cd C:\BuildFolder\tesseract-3.02\vs2008
|
||||
python tesshelper.py .. copy ..\..\include
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>See <a class="reference internal" href="maintenance.html#tesshelper"><em>The tesshelper.py Python script</em></a> for more details.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>You are now ready to <a class="reference internal" href="building.html"><em>build</em></a> <strong>Tesseract-OCR</strong> using Visual
|
||||
Studio 2008.</p>
|
||||
</div>
|
||||
<div class="section" id="using-the-latest-tesseractocr-sources">
|
||||
<span id="using-latest-sources"></span><h2>Using the latest <strong>Tesseract-OCR</strong> sources<a class="headerlink" href="#using-the-latest-tesseractocr-sources" title="Permalink to this headline">¶</a></h2>
|
||||
<p>If you’d like to try the absolute latest version of <strong>Tesseract-OCR</strong>,
|
||||
here’s how to download the source files from its SVN repository:</p>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Follow Steps 1 and 2 <a class="reference internal" href="#directory-setup"><em>above</em></a>.</p>
|
||||
</li>
|
||||
<li><p class="first"><a class="reference external" href="http://code.google.com/p/tesseract-ocr/source/checkout">Checkout</a>
|
||||
the <strong>Tesseract-OCR</strong> sources to a directory on your computer. This
|
||||
directory should <em class="bold-italic">not</em> be <span class="filesystem">C:\BuildFolder</span>!</p>
|
||||
<p>If you are unfamiliar with <a class="reference external" href="http://subversion.apache.org/">SVN</a>,
|
||||
the easiest way to do this is to first download and install
|
||||
<a class="reference external" href="http://tortoisesvn.net/">TortoiseSVN</a> and then:</p>
|
||||
<ol class="loweralpha">
|
||||
<li><p class="first">Right-click the (empty) directory where you want the working copy
|
||||
and choose <em class="menuselection">SVN Chec<span class="accelerator">k</span>out...</em> from
|
||||
the pop-up menu.</p>
|
||||
</li>
|
||||
<li><p class="first">Enter <tt class="docutils literal"><span class="pre">http://tesseract-ocr.googlecode.com/svn/trunk/</span></tt> for
|
||||
<em class="guilabel"><span class="accelerator">U</span>RL of repository</em>. You can keep all the other
|
||||
settings at their defaults.</p>
|
||||
<img alt="TortoiseSVN Checkout Dialog Box" class="align-center" src="_images/tortoisesvn_checkout.png" />
|
||||
</li>
|
||||
<li><p class="first">Click the <em class="guilabel"><span class="accelerator">O</span>K</em> button to commence downloading the
|
||||
<strong>Tesseract-OCR</strong> sources to your computer. This might take a while as
|
||||
the language data in the <span class="filesystem">tessdata</span> directory is quite large. As
|
||||
of February 2012, about 335MB needs to be transferred for the
|
||||
initial checkout. The total size of the resulting working copy is
|
||||
about 1.2GB.</p>
|
||||
</li>
|
||||
<li><p class="first">Keeping your working copy up to date after this is as simple as
|
||||
right-clicking its directory and choosing <em class="menuselection">SVN
|
||||
<span class="accelerator">U</span>pdate</em>. Unlike the initial checkout, this will usually finish
|
||||
very quickly.</p>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><p class="first">Copy the <em class="bold-italic">contents</em> of your working directory, except for the
|
||||
<span class="filesystem">tessdata</span> directory, to <span class="filesystem">C:\BuildFolder\tesseract-3.0x</span>, where
|
||||
<tt class="docutils literal"><span class="pre">x</span></tt> should probably be the latest stable release + <tt class="docutils literal"><span class="pre">alpha</span></tt>,
|
||||
<tt class="docutils literal"><span class="pre">beta</span></tt>, etc.</p>
|
||||
</li>
|
||||
<li><p class="first">Optionally, follow Step 5 from <a class="reference internal" href="#copying-headers"><em>above</em></a>.</p>
|
||||
</li>
|
||||
<li><p class="first">You’ll probably want to set an environment varible named
|
||||
<tt class="docutils literal"><span class="pre">TESSDATA_PREFIX</span></tt> to point at your working copy directory (since
|
||||
that now contains the latest <span class="filesystem">tessdata</span> directory).</p>
|
||||
</li>
|
||||
<li><p class="first">If someone hasn’t already done so, you have to proceed to
|
||||
<a class="reference internal" href="maintenance.html#updating-vs2008-directory"><em>Updating the VS2008 directory for new releases of Tesseract-OCR</em></a>. You can skip all the steps that
|
||||
relate to updating the version number. Otherwise, depending on how
|
||||
many changes have been made since the last stable release, you may
|
||||
have little or no work to do.</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Setting up <strong>Tesseract-OCR</strong></a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#initial-build-directory-setup">Initial “Build” directory setup</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#using-the-latest-tesseractocr-sources">Using the latest <strong>Tesseract-OCR</strong> sources</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="building.html" title="Building Tesseract-OCR"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="overview.html" title="Overview"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,309 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Handy free tools — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Maintaining the VS2008 directory" href="maintenance.html" />
|
||||
<link rel="prev" title="Programming with libtesseract" href="programming.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="maintenance.html" title="Maintaining the VS2008 directory"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="programming.html" title="Programming with libtesseract"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="handy-free-tools">
|
||||
<h1>Handy free tools<a class="headerlink" href="#handy-free-tools" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="id1">
|
||||
<h2><a class="reference external" href="http://tortoisesvn.net/">TortoiseSVN</a><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The <strong>Tesseract-OCR</strong> source lives in an SVN repository at <a class="reference external" href="http://code.google.com/p/tesseract-ocr/source/checkout">Google Code</a>, so to
|
||||
<a class="reference internal" href="setup.html#using-latest-sources"><em>build the latest versions</em></a> you’ll need to
|
||||
know SVN. For newcomers (or not), TortoiseSVN (<a class="reference external" href="http://tortoisesvn.net/">http://tortoisesvn.net/</a>)
|
||||
is a great alternative to the SVN command line interface.</p>
|
||||
<p>“TortoiseSVN is an easy-to-use SCM / source control software for
|
||||
Microsoft Windows and possibly the best standalone Apache Subversion
|
||||
client there is. It is implemented as a Windows shell extension, which
|
||||
makes it integrate seamlessly into the Windows explorer. Since it’s not
|
||||
an integration for a specific IDE you can use it with whatever
|
||||
development tools you like.”</p>
|
||||
</div>
|
||||
<div class="section" id="id2">
|
||||
<h2><a class="reference external" href="http://jpsoft.com/tccle_cmd_replacement.html">JP Software TCC/LE</a><a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Instead of using Windows’ plain old Command Prompt window — and less
|
||||
intimidating than using the bash shell from <a class="reference external" href="http://cygwin.com/">cygwin</a> or <a class="reference external" href="http://mingw.org/wiki/msys">MSYS</a> — the
|
||||
“TCC/LE - Windows CMD Replacement Command Console” by JP Software is
|
||||
definitely worth trying. It is available at
|
||||
<a class="reference external" href="http://jpsoft.com/tccle_cmd_replacement.html">http://jpsoft.com/tccle_cmd_replacement.html</a>.</p>
|
||||
<p>For example, to look for all the settable options in <strong>Tesseract-OCR</strong>,
|
||||
try:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>C:\BuildFolder\tesseract-3.02\
|
||||
ffind /s/v/c/t"_MEMBER" *.cpp | list/s
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>and you’ll get something that looks like this in the <span class="filesystem">list</span> viewer:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>---- C:\BuildFolder\tesseract-3.02\ccmain\tesseractclass.cpp
|
||||
: BOOL_MEMBER(tessedit_resegment_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_resegment_from_line_boxes, false,
|
||||
BOOL_MEMBER(tessedit_train_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_make_boxes_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_dump_pageseg_images, false,
|
||||
...
|
||||
double_MEMBER(segsearch_max_char_wh_ratio, 2.0,
|
||||
double_MEMBER(segsearch_max_fixed_pitch_char_wh_ratio, 2.0,
|
||||
BOOL_MEMBER(save_alt_choices, false,
|
||||
|
||||
413 lines in 7 files
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>(Press the <tt class="kbd docutils literal"><span class="pre">Escape</span></tt> key to exit the <span class="filesystem">list</span> viewer).</p>
|
||||
<p>The equivalent(?) Linux incantation, copied and slightly modified from
|
||||
the grep info, is:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>find . -name '*.cpp' -print0 | xargs -0r grep -H '_MEMBER' | less
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Note: You can also do this directly in Visual Studio 2008, by choosing
|
||||
<em class="menuselection"><span class="accelerator">E</span>dit ‣ <span class="accelerator">F</span>ind and Replace ‣ F<span class="accelerator">i</span>nd in Files</em>
|
||||
(<tt class="kbd docutils literal"><span class="pre">Ctrl+Shift+F</span></tt>), so maybe this wasn’t the best example:</p>
|
||||
<img alt="Visual Studio 2008 Find in Files Dialog" class="align-center" src="_images/find_in_files.png" />
|
||||
</div>
|
||||
<div class="section" id="id4">
|
||||
<h2><a class="reference external" href="http://cygwin.com/">Cygwin</a><a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
|
||||
<p>“<a class="reference external" href="http://cygwin.com/">Cygwin</a> is a collection of tools which provide a
|
||||
Linux look and feel environment for Windows.”</p>
|
||||
<p><strong>Leptonica</strong> actually still requires a few unix utilities (like <span class="filesystem">rm</span>,
|
||||
<span class="filesystem">diff</span>, <span class="filesystem">sleep</span>) for some operations and might silently fail if it they
|
||||
not present (as of v1.68). The easiest way to deal with this is to
|
||||
<a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-cygwin.html">install Cygwin</a>
|
||||
or MSYS (see the next section).</p>
|
||||
</div>
|
||||
<div class="section" id="id7">
|
||||
<h2><a class="reference external" href="http://mingw.org/wiki/msys">MSYS</a><a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h2>
|
||||
<p>“<a class="reference external" href="http://mingw.org/wiki/msys">MSYS</a> is a collection of GNU utilities
|
||||
such as bash, make, gawk and grep to allow building of applications and
|
||||
programs which depend on traditionally UNIX tools to be present. It is
|
||||
intended to supplement MinGW and the deficiencies of the cmd shell.”</p>
|
||||
</div>
|
||||
<div class="section" id="windiff">
|
||||
<h2>WinDiff<a class="headerlink" href="#windiff" title="Permalink to this headline">¶</a></h2>
|
||||
<p>An important phase of testing <span class="filesystem">tesseract</span> is checking how its output
|
||||
compares to previous runs (or ground-truth files). A visual diff program
|
||||
can make that easier.</p>
|
||||
<p>Microsoft’s WinDiff doesn’t seem to come with Visual Studio
|
||||
anymore. However it can still be downloaded from <a class="reference external" href="http://www.grigsoft.com/download-windiff.htm">Grig Software</a> (without having to get
|
||||
all the other stuff in the <a class="reference external" href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=18546">Windows XP Service Pack 2 Support Tools</a>.</p>
|
||||
<p>Other options are <a class="reference external" href="http://kdiff3.sourceforge.net/">KDiff3</a> and
|
||||
<a class="reference external" href="http://www.prestosoft.com/edp_examdiff.asp">ExamDiff</a> (<a class="reference external" href="http://www.prestosoft.com/edp_examdiffpro.asp">ExamDiff Pro</a> is also recommended
|
||||
but it’s not free).</p>
|
||||
<p>KDiff3 doesn’t seem to correctly auto-detect UTF-8 encodings so choose
|
||||
<em class="menuselection"><span class="accelerator">S</span>ettings ‣ <span class="accelerator">C</span>onfigure KDiff3...</em> from the menubar and
|
||||
set the <em class="guilabel">Regional Settings</em> tab as follows:</p>
|
||||
<img alt="KDiff3 Regional Settings" class="align-center" src="_images/kdif3_settings.png" />
|
||||
<p>Also on the <em class="guilabel">Integration</em> tab, make sure that <em class="guilabel">Quit
|
||||
also via Escape key</em> is turned on (checked). Since IrfanView also quits
|
||||
when you press the <tt class="kbd docutils literal"><span class="pre">Esc</span></tt> key, this just makes it easy to dismiss
|
||||
both applications with the same key.</p>
|
||||
<p>Here is KDiff3 showing the (slight) difference in OCR results after
|
||||
deskewing a grayscale image:</p>
|
||||
<div class="figure align-center">
|
||||
<a class="reference external image-reference" href="_images/sample_diff.png"><img alt="Diff in OCR after deskewing image" src="_images/sample_diff.png" style="height: 512px;" /></a>
|
||||
<p class="caption"><a class="reference external" href="_images/sample_diff.png">Click for larger image</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="id9">
|
||||
<h2><a class="reference external" href="http://www.irfanview.com/">IrfanView</a><a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h2>
|
||||
<p>You need some program to view the images you are trying to OCR and since
|
||||
<strong>Leptonica</strong> uses IrfanView (<a class="reference external" href="http://www.irfanview.com/">http://www.irfanview.com/</a>) to <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-irfanview.html">automatically
|
||||
display images</a>,
|
||||
you might as well use it also.</p>
|
||||
<p>“IrfanView is a very fast, small, compact and innovative FREEWARE (for
|
||||
non-commercial use) graphic viewer for Windows 9x, ME, NT, 2000, XP,
|
||||
Vista, Windows 7.”</p>
|
||||
<p>Pressing the <tt class="kbd docutils literal"><span class="pre">I</span></tt> key while viewing an image with IrfanView, will
|
||||
bring up a dialog box that shows most of its important properties (like
|
||||
bits/pixel and DPI).</p>
|
||||
</div>
|
||||
<div class="section" id="id10">
|
||||
<h2><a class="reference external" href="http://www.awaresystems.be/imaging/tiff/astifftagviewer.html">Aware Systems AsTiffTagViewer</a><a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h2>
|
||||
<p>This utility, available at
|
||||
<a class="reference external" href="http://www.awaresystems.be/imaging/tiff/astifftagviewer.html">http://www.awaresystems.be/imaging/tiff/astifftagviewer.html</a>, let’s you
|
||||
easily determine TIFF image file properties.</p>
|
||||
<p>“Whenever a customer reports your software doesn’t handle this or that
|
||||
particular TIFF, use AsTiffTagViewer and discover why.”</p>
|
||||
</div>
|
||||
<div class="section" id="id11">
|
||||
<h2><a class="reference external" href="http://dependencywalker.com/">Dependency Walker</a><a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h2>
|
||||
<p>If you’re having problems with missing module runtime errors, the
|
||||
Dependency Walker (<a class="reference external" href="http://dependencywalker.com/">http://dependencywalker.com/</a>) usually can help track
|
||||
down the problem.</p>
|
||||
<p>“Dependency Walker is also very useful for troubleshooting system errors
|
||||
related to loading and executing modules. Dependency Walker detects many
|
||||
common application problems such as missing modules, invalid modules,
|
||||
import/export mismatches, circular dependency errors, mismatched machine
|
||||
types of modules, and module initialization failures.”</p>
|
||||
<p>You probably want the 32-bit version even if you are running on a
|
||||
Windows 64-bit platform, because the current VS2008 Solution for
|
||||
<strong>Tesseract-OCR</strong> by default builds a 32-bit app. From the <a class="reference external" href="http://dependencywalker.com/faq.html">FAQ</a></p>
|
||||
<blockquote>
|
||||
<div>“There are 32-bit and 64-bit versions Dependency Walker. All versions
|
||||
are capable or opening 32-bit and 64-bit modules. However, there are
|
||||
major advantages to using the 32-bit Dependency Walker to process 32-bit
|
||||
modules and the 64-bit Dependency Walker to process 64-bit modules.
|
||||
This is especially true when running on a 64-bit version of Windows,
|
||||
which allows execution of both 32-bit and 64-bit programs. The 32-bit
|
||||
subsystem on 64-bit Windows (known as “WOW64”) has its own private
|
||||
registry, “AppPaths”, “KnownDlls”, system folders, and manifest
|
||||
processing. Only the 32-bit version of Dependency Walker can access
|
||||
this 32-bit environment, which is needed to accurately process a 32-bit
|
||||
module. Likewise, only the 64-bit version of Dependency Walker can
|
||||
fully access the 64-bit environment, so it should always be used for
|
||||
processing 64-bit modules.”</div></blockquote>
|
||||
<div class="figure align-center">
|
||||
<a class="reference external image-reference" href="_images/dependency_walker.png"><img alt="Dependency Walker view of tesseract-dlld.exe" src="_images/dependency_walker.png" style="height: 640px;" /></a>
|
||||
<p class="caption"><a class="reference external" href="_images/dependency_walker.png">Click for larger image</a></p>
|
||||
</div>
|
||||
<p>The above image shows Dependency Walker used on
|
||||
<span class="filesystem">tesseract-dlld.exe</span>. The panes show the <span class="filesystem">DLL</span>s that it is dependent
|
||||
on, the methods it actually uses from <span class="filesystem">libtesseract302d.dll</span>, and all
|
||||
the exported methods from <span class="filesystem">libtesseract302d.dll</span>. Using this it’s easy
|
||||
to see that only the <tt class="docutils literal"><span class="pre">TessBaseAPI</span></tt> and <tt class="docutils literal"><span class="pre">STRING</span></tt> classes are exported
|
||||
as mentioned in <a class="reference internal" href="programming.html"><em>Programming with libtesseract</em></a>.</p>
|
||||
</div>
|
||||
<div class="section" id="id12">
|
||||
<h2><a class="reference external" href="http://technet.microsoft.com/en-us/sysinternals/bb896653">Sysinternals Process Explorer</a><a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Another essential program to help figure out what your program is doing
|
||||
is Process Explorer
|
||||
(<a class="reference external" href="http://technet.microsoft.com/en-us/sysinternals/bb896653">http://technet.microsoft.com/en-us/sysinternals/bb896653</a>).</p>
|
||||
<p>“The unique capabilities of Process Explorer make it useful for tracking
|
||||
down DLL-version problems or handle leaks, and provide insight into the
|
||||
way Windows and applications work.”</p>
|
||||
</div>
|
||||
<div class="section" id="id13">
|
||||
<h2><a class="reference external" href="http://www.vmware.com/products/player/">VMware Player</a><a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h2>
|
||||
<p>VMware Player (<a class="reference external" href="http://www.vmware.com/products/player/">http://www.vmware.com/products/player/</a>) can be used to
|
||||
install, for example, <a class="reference external" href="http://www.ubuntu.com/">Ubuntu 11.10</a> in a
|
||||
virtual machine on Windows and see how the other half lives. It also
|
||||
helps when trying to figure out if the Windows version of <span class="filesystem">tesseract</span>
|
||||
acts the same way as the “original” version.</p>
|
||||
<p>“VMware Player is the easiest way to run multiple operating systems at
|
||||
the same time on your PC. With its user-friendly interface, VMware
|
||||
Player makes it effortless for anyone to try out Windows 8 developer
|
||||
release, Windows 7, Chrome OS or the latest Linux releases, or create
|
||||
isolated virtual machines to safely test new software and surf the Web.”</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Handy free tools</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id1">TortoiseSVN</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id2">JP Software TCC/LE</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id4">Cygwin</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id7">MSYS</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#windiff">WinDiff</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id9">IrfanView</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id10">Aware Systems AsTiffTagViewer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id11">Dependency Walker</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id12">Sysinternals Process Explorer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#id13">VMware Player</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="maintenance.html" title="Maintaining the VS2008 directory"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="programming.html" title="Programming with libtesseract"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,277 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Version Notes — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="prev" title="Using Visual Studio 2010" href="vs2010-notes.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="vs2010-notes.html" title="Using Visual Studio 2010"
|
||||
accesskey="P">previous</a></li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="version-notes">
|
||||
<h1>Version Notes<a class="headerlink" href="#version-notes" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="february-2012">
|
||||
<h2>3.02.02 – October 31, 2012<a class="headerlink" href="#february-2012" title="Permalink to this headline">¶</a></h2>
|
||||
<ul>
|
||||
<li><p class="first">Created a completely new Visual Studio 2008 solution from scratch.</p>
|
||||
</li>
|
||||
<li><p class="first">Added 64 new source files and removed the following deleted files
|
||||
(relative to v3.01):</p>
|
||||
<blockquote>
|
||||
<div><ul>
|
||||
<li><p class="first">ccutilmemblk.cpp</p>
|
||||
</li>
|
||||
<li><p class="first">ccutilmemblk.h</p>
|
||||
</li>
|
||||
<li><p class="first">ccutilmemryerr.h</p>
|
||||
</li>
|
||||
<li><p class="first">wordrecpieces.h</p>
|
||||
</li>
|
||||
<li><p class="first">wordrectally.cpp</p>
|
||||
</li>
|
||||
<li><p class="first">wordrectally.h</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</li>
|
||||
<li><p class="first">Created <em class="guilabel">LIB_Release</em>, <em class="guilabel">LIB_Debug</em>,
|
||||
<em class="guilabel">DLL_Release</em>, and <em class="guilabel">DLL_Debug</em> build
|
||||
configurations.</p>
|
||||
</li>
|
||||
<li><p class="first">Created a single <span class="filesystem">libtesseract</span> library and removed generation of the
|
||||
twelve sub-libraries.</p>
|
||||
</li>
|
||||
<li><p class="first">Used references to <span class="filesystem">leptonica_versionnumbers.vsprops</span> and
|
||||
<span class="filesystem">tesseract_versionnumbers.vsprops</span> Property Sheets, which define
|
||||
version number “user macros”, in all Visual Studio Projects. These are
|
||||
also copied to <span class="filesystem">C:\BuildFolder\include</span>, so you can refer to them in
|
||||
your own projects. By using the new <tt class="docutils literal"><span class="pre">*_VERSION</span></tt> macros, you’ll be
|
||||
isolated from worrying about version number changes in the library
|
||||
filenames.</p>
|
||||
<p>See <a class="reference internal" href="programming.html#apitest"><em>APITest’s</em></a> <a class="reference internal" href="programming.html#apitest-lib-release"><em>LIB_Release</em></a> Linker
|
||||
<em class="guilabel">Additional Dependencies</em> settings for an example of what
|
||||
this looks like in practice.</p>
|
||||
<p>See <strong>Leptonica</strong>’s explanation <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/downloading-binaries.html#about-version-numbers">About version numbers in library
|
||||
filenames</a>
|
||||
for more details.</p>
|
||||
</li>
|
||||
<li><p class="first">Added a <a class="reference internal" href="building.html#version-resource"><em>Version Resource</em></a> to all DLLs and
|
||||
applications.</p>
|
||||
</li>
|
||||
<li><p class="first">Removed inclusion of the <strong>Leptonica</strong> libraries. They now have to be
|
||||
<a class="reference internal" href="setup.html#download-leptonica"><em>downloaded separately</em></a>.</p>
|
||||
</li>
|
||||
<li><p class="first">Changed to a <a class="reference internal" href="setup.html#directory-setup"><em>Build directory structure</em></a> that
|
||||
is compatible with <strong>Leptonica</strong> and allows the building of
|
||||
<strong>Tesseract-OCR</strong>-based applications using only the <span class="filesystem">include</span> and <span class="filesystem">lib</span>
|
||||
directories.</p>
|
||||
</li>
|
||||
<li><p class="first">The <span class="filesystem">libtesseract</span> libraries are now named as follows:</p>
|
||||
<p>static libraries:</p>
|
||||
<ul>
|
||||
<li><p class="first">libtesseract302-static.lib</p>
|
||||
</li>
|
||||
<li><p class="first">libtesseract302-static-debug.lib</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>DLLs:</p>
|
||||
<ul>
|
||||
<li><p class="first">libtesseract302.lib (import library)</p>
|
||||
</li>
|
||||
<li><p class="first">libtesseract302.dll</p>
|
||||
</li>
|
||||
<li><p class="first">libtesseract302d.lib (import library)</p>
|
||||
</li>
|
||||
<li><p class="first">libtesseract302d.dll</p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p class="first">Used compiler and linker settings based on the <strong>Leptonica</strong> <a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/index.html">VS2008
|
||||
Developer package</a>.</p>
|
||||
</li>
|
||||
<li><p class="first">Removed all preprocessor defines of <tt class="docutils literal"><span class="pre">__MSW32__</span></tt> which is no longer
|
||||
needed.</p>
|
||||
</li>
|
||||
<li><p class="first">Removed <span class="filesystem">vs2008includestdint.h</span> which is no longer required to build
|
||||
<span class="filesystem">liblept</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Removed <span class="filesystem">vs2008includeinttypes.h</span> which isn’t needed to build
|
||||
<span class="filesystem">liblept</span>.</p>
|
||||
</li>
|
||||
<li><p class="first">Turned off the following compiler warnings:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>/wd4005: 'snprintf' : macro redefinition
|
||||
|
||||
/wd4018 'expression' : signed/unsigned mismatch
|
||||
|
||||
/wd4099 type name first seen using 'class' now seen using 'struct'
|
||||
|
||||
/wd4244 conversion from 'double' to 'float', possible loss of data
|
||||
|
||||
/wd4267 conversion from 'size_t' to 'type', possible loss of data
|
||||
|
||||
/wd4305 truncation from 'type1' to 'type2'
|
||||
|
||||
/wd4355 'this' : used in base member initializer list
|
||||
|
||||
/wd4566 character represented by universal-character-name x cannot
|
||||
be represented in the current code page
|
||||
|
||||
/wd4800 forcing value to bool 'true' or 'false' (performance warning)
|
||||
|
||||
/wd4996 'function': was declared deprecated
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Used the “C7 Compatible” Debug Information (/Z7) compiler switch,
|
||||
which puts the debugging information in the .obj files. That way we
|
||||
don’t have to worry about also supplying <span class="filesystem">.pdb</span> files. See <a class="reference external" href="http://msdn.microsoft.com/en-us/library/958x11bc(VS.90).aspx">/Z7,
|
||||
/Zi, /ZI (Debug Information Format)</a> for
|
||||
more information.</p>
|
||||
</li>
|
||||
<li><p class="first">Added Projects for the following new <a class="reference internal" href="overview.html#training-applications"><em>training applications</em></a>:</p>
|
||||
<ul>
|
||||
<li><p class="first">ambiguous_words</p>
|
||||
</li>
|
||||
<li><p class="first">classifier_tester</p>
|
||||
</li>
|
||||
<li><p class="first">dawg2wordlist</p>
|
||||
</li>
|
||||
<li><p class="first">shapeclustering</p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p class="first">Moved <span class="filesystem">mathfix.h</span> from <span class="filesystem">vs2008\include</span> to the <span class="filesystem">vs2008\port</span>
|
||||
directory.</p>
|
||||
</li>
|
||||
<li><p class="first">Removed Visual Studio 2010 support. See <a class="reference internal" href="vs2010-notes.html"><em>Using Visual Studio 2010</em></a> for the
|
||||
rationale.</p>
|
||||
</li>
|
||||
<li><p class="first">Created a python script called <a class="reference internal" href="maintenance.html#tesshelper"><em>tesshelper.py</em></a>, that
|
||||
eases some maintenance tasks related to releasing future VS2008
|
||||
Solutions.</p>
|
||||
</li>
|
||||
<li><p class="first">The list of “public” header files that are required to build
|
||||
“external” applications is now limited to the following 13 files:</p>
|
||||
<div class="highlight-none"><div class="highlight"><pre>api\apitypes.h
|
||||
api\baseapi.h
|
||||
ccmain\thresholder.h
|
||||
ccstruct\publictypes.h
|
||||
ccutil\errcode.h
|
||||
ccutil\fileerr.h
|
||||
ccutil\host.h
|
||||
ccutil\memry.h
|
||||
ccutil\platform.h
|
||||
ccutil\serialis.h
|
||||
ccutil\strngs.h
|
||||
ccutil\tesscallback.h
|
||||
ccutil\unichar.h
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="vs2010-notes.html">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Version Notes</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#february-2012">3.02.02 – October 31, 2012</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="vs2010-notes.html" title="Using Visual Studio 2010"
|
||||
>previous</a></li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,125 +0,0 @@
|
||||
|
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Using Visual Studio 2010 — Visual Studio 2008 Developer Notes for Tesseract-OCR</title>
|
||||
|
||||
<link rel="stylesheet" href="_static/tesseract.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '3.02',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/sidebar.js"></script>
|
||||
<link rel="top" title="Visual Studio 2008 Developer Notes for Tesseract-OCR" href="index.html" />
|
||||
<link rel="next" title="Version Notes" href="versions.html" />
|
||||
<link rel="prev" title="Maintaining the VS2008 directory" href="maintenance.html" />
|
||||
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="versions.html" title="Version Notes"
|
||||
accesskey="N">next</a></li>
|
||||
<li class="right" >
|
||||
<a href="maintenance.html" title="Maintaining the VS2008 directory"
|
||||
accesskey="P">previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="using-visual-studio-2010">
|
||||
<h1>Using Visual Studio 2010<a class="headerlink" href="#using-visual-studio-2010" title="Permalink to this headline">¶</a></h1>
|
||||
<p>There currently isn’t an analogous <span class="filesystem">VS2010</span> sub-directory for
|
||||
<strong>Tesseract-OCR</strong>. However, you should be able to adapt the instructions at
|
||||
<a class="reference external" href="http://tpgit.github.com/UnOfficialLeptDocs/vs2008/vs2010-notes.html">http://tpgit.github.com/UnOfficialLeptDocs/vs2008/vs2010-notes.html</a> to
|
||||
convert the VS2008 solution.</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
|
||||
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="setup.html">Setting up <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="building.html">Building <strong>Tesseract-OCR</strong></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="programming.html">Programming with <span class="filesystem">libtesseract</span></a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Handy free tools</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintaining the VS2008 directory</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Using Visual Studio 2010</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="versions.html">Version Notes</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Go" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="versions.html" title="Version Notes"
|
||||
>next</a></li>
|
||||
<li class="right" >
|
||||
<a href="maintenance.html" title="Maintaining the VS2008 directory"
|
||||
>previous</a> |</li>
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a> »</li>
|
||||
|
||||
<li><a href="index.html">Visual Studio 2008 Developer Notes</a> »</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioPropertySheet
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="leptonica_versionnumbers"
|
||||
>
|
||||
<UserMacro
|
||||
Name="GIFLIB_VERSION"
|
||||
Value="416"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBJPEG_VERSION"
|
||||
Value="8c"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBLEPT_VERSION"
|
||||
Value="168"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBLEPT_VERSION_R"
|
||||
Value="1,68,0,0"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBLEPT_NUMBER"
|
||||
Value="1.68"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBPNG_VERSION"
|
||||
Value="143"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBTIFF_VERSION"
|
||||
Value="394"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="ZLIB_VERSION"
|
||||
Value="125"
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioPropertySheet
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="tesseract_versionnumbers"
|
||||
InheritedPropertySheets=".\leptonica_versionnumbers.vsprops"
|
||||
>
|
||||
<UserMacro
|
||||
Name="LIBTESS_VERSION"
|
||||
Value="303"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBTESS_VERSION_R"
|
||||
Value="3,3,0,0"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="LIBTESS_NUMBER"
|
||||
Value="3.03"
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x7L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Tesseract OCR library"
|
||||
VALUE "FileVersion", "3, 3, 0, 0"
|
||||
VALUE "InternalName", "libtesseract"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "libtesseract"
|
||||
VALUE "ProductName", "Tesseract OCR Library"
|
||||
VALUE "ProductVersion", "3, 3, 0, 0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by libtesseract303.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "feature training for Tesseract"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "mftraining"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "mftraining.exe"
|
||||
VALUE "ProductName", "Tesseract-OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,225 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="mftraining"
|
||||
ProjectGUID="{7CD94A0D-61EF-4A6C-8442-3D7E6AC03D88}"
|
||||
RootNamespace="mftraining"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\mergenf.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\training\mftraining.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\mergenf.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\mftraining.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,32 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// File: gettimeofday.cpp
|
||||
// Description: Implementation of gettimeofday based on leptonica
|
||||
// Author: tomp2010, zdenop
|
||||
// Created: Tue Feb 21 21:38:00 CET 2012
|
||||
//
|
||||
// (C) Copyright 2012, Google Inc.
|
||||
// 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 <allheaders.h>
|
||||
#include "gettimeofday.h"
|
||||
|
||||
int gettimeofday(struct timeval *tp, struct timezone *tzp) {
|
||||
l_int32 sec, usec;
|
||||
if (tp == NULL)
|
||||
return -1;
|
||||
|
||||
l_getCurrentTime(&sec, &usec);
|
||||
tp->tv_sec = sec;
|
||||
tp->tv_usec = usec;
|
||||
return 0;
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// File: gettimeofday.h
|
||||
// Description: Header file for gettimeofday.cpp
|
||||
// Author: tomp2010, zdenop
|
||||
// Created: Tue Feb 21 21:38:00 CET 2012
|
||||
//
|
||||
// (C) Copyright 2012, Google Inc.
|
||||
// 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 VS2008_PORT_GETTIMEOFDAY_H_
|
||||
#define VS2008_PORT_GETTIMEOFDAY_H_
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <winsock.h> // timeval is defined in here.
|
||||
#endif
|
||||
|
||||
typedef struct timezone tz;
|
||||
|
||||
int gettimeofday(struct timeval * tp, struct timezone * tzp);
|
||||
|
||||
#endif // VS2008_PORT_GETTIMEOFDAY_H_
|
@ -1,38 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// File: mathfix.h
|
||||
// Description: Implement missing math functions
|
||||
// Author: zdenop
|
||||
// Created: Fri Feb 03 06:45:06 CET 2012
|
||||
//
|
||||
// (C) Copyright 2012, Google Inc.
|
||||
// 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 VS2008_INCLUDE_MATHFIX_H_
|
||||
#define VS2008_INCLUDE_MATHFIXT_H_
|
||||
|
||||
#ifndef _MSC_VER
|
||||
#error "Use this header only with Microsoft Visual C++ compilers!"
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
#include <float.h> // for _isnan(), _finite() on VC++
|
||||
|
||||
#if _MSC_VER < 1800
|
||||
#define isnan(x) _isnan(x)
|
||||
#define isinf(x) (!_finite(x))
|
||||
#define fmax max //VC++ does not implement all the provisions of C99 Standard
|
||||
#define round(x) roundf(x)
|
||||
inline float roundf(float num) { return num > 0 ? floorf(num + 0.5f) : ceilf(num - 0.5f); }
|
||||
#endif
|
||||
|
||||
#endif // VS2008_INCLUDE_MATHFIXT_H_
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
// source: https://github.com/heimdal/heimdal/blob/master/lib/roken/strtok_r.c
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char *strtok_r(char *s1, const char *s2, char **lasts) {
|
||||
char *ret;
|
||||
|
||||
if (s1 == NULL)
|
||||
s1 = *lasts;
|
||||
while (*s1 && strchr(s2, *s1))
|
||||
++s1;
|
||||
if (*s1 == '\0')
|
||||
return NULL;
|
||||
ret = s1;
|
||||
while (*s1 && !strchr(s2, *s1))
|
||||
++s1;
|
||||
if (*s1)
|
||||
*s1++ = '\0';
|
||||
*lasts = s1;
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,27 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// File: strtok_r.h
|
||||
// Description: Header file for strtok_r.cpp
|
||||
// source: https://github.com/heimdal/heimdal/blob/master/lib/roken/
|
||||
// strtok_r.c
|
||||
// Author: zdenop
|
||||
// Created: Fri Aug 12 23:55:06 CET 2011
|
||||
//
|
||||
// (C) Copyright 2011, Google Inc.
|
||||
// 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 VS2008_PORT_STRTOK_R_H_
|
||||
#define VS2008_PORT_STRTOK_R_H_
|
||||
|
||||
char *strtok_r(char *s1, const char *s2, char **lasts);
|
||||
|
||||
#endif // VS2008_PORT_STRTOK_R_H_
|
@ -1 +0,0 @@
|
||||
see doc\index.html
|
@ -1,14 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by tesseract.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,3,0,0
|
||||
PRODUCTVERSION 3,3,0,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "Shape clustering training for Tesseract"
|
||||
VALUE "FileVersion", "3,3,0,0"
|
||||
VALUE "InternalName", "shapeclustering"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2013 Google, Inc. Licensed under the Apache License, Version 2.0"
|
||||
VALUE "OriginalFilename", "shapeclustering.exe"
|
||||
VALUE "ProductName", "Tesseract-OCR"
|
||||
VALUE "ProductVersion", "3.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,218 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="shapeclustering"
|
||||
ProjectGUID="{B1A80DBB-CBEF-4B1C-B0E6-1C49584CD904}"
|
||||
RootNamespace="shapeclustering"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="LIB_Debug|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_STD_NAMESPACE"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="$(IntDir)\vc90.pdb"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="1"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
ShowIncludes="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll-debug.lib libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName)d.exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="LIB_Release|Win32"
|
||||
OutputDirectory="..\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="..\include\tesseract_versionnumbers.vsprops"
|
||||
CharacterSet="2"
|
||||
EnableManagedIncrementalBuild="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description=""
|
||||
CommandLine=""
|
||||
Outputs=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="..\..\api;..\..\ccmain;..\..\ccutil;..\..\ccstruct;..\..\classify;..\..\cube;..\..\cutil;..\..\dict;..\..\image;..\..\neural_networks\runtime;..\..\textord;..\..\viewer;..\..\wordrec;.;..\..\..\include;..\..\..\include\leptonica;..\port"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;USE_STD_NAMESPACE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
DisableSpecificWarnings="4244;4305;4018;4267;4996;4800;4005;4355;4099;4566"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="MYVERSION="$(LIBTESS_VERSION_R)""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib user32.lib zlib$(ZLIB_VERSION)-static-mtdll.lib libpng$(LIBPNG_VERSION)-static-mtdll.lib libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib giflib$(GIFLIB_VERSION)-static-mtdll.lib libtiff$(LIBTIFF_VERSION)-static-mtdll.lib liblept$(LIBLEPT_VERSION)-static-mtdll.lib $(NOINHERIT)"
|
||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||
AdditionalLibraryDirectories="..\..\..\lib"
|
||||
SubSystem="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\training\shapeclustering.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\shapeclustering.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,153 +0,0 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Tesseract-ocrDocumentation.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Tesseract-ocrDocumentation.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/Tesseract-ocrDocumentation"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Tesseract-ocrDocumentation"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
@ -1,240 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
=========================
|
||||
Building |Tesseractocr|
|
||||
=========================
|
||||
|
||||
The Visual Studio 2008 Solution for |Tesseractocr| builds:
|
||||
|
||||
+ `libtesseract`
|
||||
|
||||
+ `tesseract.exe`
|
||||
|
||||
+ 9 training applications (for v3.02)
|
||||
|
||||
Unlike earlier Solutions only a single `libtesseract` library is
|
||||
generated --- the twelve projects matching the twelve source subfolders
|
||||
have been abandoned. They were deemed too complicated since they were
|
||||
never (rarely?) used by themselves, but only along with the entire
|
||||
library.
|
||||
|
||||
In addition, `libtesseract` and `tesseract.exe` can be built using four
|
||||
configurations: :guilabel:`LIB_Release`, :guilabel:`LIB_Debug`,
|
||||
:guilabel:`DLL_Release`, and :guilabel:`DLL_Debug`.
|
||||
|
||||
Two Visual Studio Property Sheets, `leptonica_versionnumbers.vsprops`
|
||||
and `tesseract_versionnumbers.vsprops`, are employed to isolate the
|
||||
Solution from changes in dependency version numbers (and isolate
|
||||
dependent Solutions). See :ref:`APITest's <APITest>` :ref:`LIB_Release
|
||||
<apitest-lib-release>` Linker :guilabel:`Additional Dependencies`
|
||||
settings for an example of what this looks like in practice. See
|
||||
|Leptonica|\ ’s explanation `About version numbers in library filenames
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/downloading-binaries.html#about-version-numbers>`_
|
||||
for the rationale behind using Property Sheets.
|
||||
|
||||
|
||||
Building `libtesseract` and `tesseract.exe`
|
||||
===========================================
|
||||
|
||||
1. Open `C:\\BuildFolder\\tesseract-3.0x\\vs2008\\tesseract.sln` in Visual
|
||||
Studio 2008.
|
||||
|
||||
You'll see the following projects in the :guilabel:`Solution
|
||||
Explorer` (for v3.02)::
|
||||
|
||||
ambiguous_words
|
||||
classifier_tester
|
||||
cntraining
|
||||
combine_tessdata
|
||||
dawg2wordlist
|
||||
libtesseract302
|
||||
mftraining
|
||||
shapeclustering
|
||||
tesseract
|
||||
unicharset_extractor
|
||||
wordlist2dawg
|
||||
|
||||
2. Select the build configuration you'd like to use from the
|
||||
:guilabel:`Solution Configurations` dropdown. It lists the following
|
||||
configurations::
|
||||
|
||||
DLL_Debug
|
||||
DLL_Release
|
||||
LIB_Debug
|
||||
LIB_Release
|
||||
|
||||
The `DLL_` configurations build the DLL version of `libtesseract-3.0x`
|
||||
(and link with the DLL version of Leptonica 1.68). The `LIB_`
|
||||
configurations build the static library version of `libtesseract-3.0x`
|
||||
(and link with the static version of Leptonica 1.68 and the required
|
||||
image libraries).
|
||||
|
||||
3. Build `libtesseract` by right-clicking the
|
||||
:guilabel:`libtesseract30x` project and choosing
|
||||
:menuselection:`B&uild` from the pop-up menu.
|
||||
|
||||
The resultant library will be written to the
|
||||
`C:\\BuildFolder\\tesseract-3.0x\\vs2008\\<ConfigurationName>` directory
|
||||
where `<ConfigurationName>` is the same as the build configuration you
|
||||
selected earlier. It is also copied to the `C:\\BuildFolder\\lib` folder
|
||||
to make it easy to link your own applications to `libtesseract`.
|
||||
|
||||
The library is named as follows (for v3.02):
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
static libraries:
|
||||
|
||||
`libtesseract302-static.lib`
|
||||
`libtesseract302-static-debug.lib`
|
||||
|
||||
DLLs:
|
||||
|
||||
`libtesseract302.lib` (import library)
|
||||
`libtesseract302.dll`
|
||||
`libtesseract302d.lib` (import library)
|
||||
`libtesseract302d.dll`
|
||||
|
||||
4. Build the main tesseract OCR application by right-clicking the
|
||||
:guilabel:`tesseract` project and choosing :menuselection:`B&uild`.
|
||||
|
||||
The resultant executable will be written to the
|
||||
`C:\\BuildFolder\\tesseract-3.0x\\vs2008\\<ConfigurationName>` directory
|
||||
where `<ConfigurationName>` is the same as the build configuration you
|
||||
selected earlier. It is named as follows:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
LIB_Release: `tesseract.exe`
|
||||
LIB_Debug: `tesseractd.exe`
|
||||
DLL_Release: `tesseract-dll.exe`
|
||||
DLL_Debug: `tesseract-dlld.exe`
|
||||
|
||||
|
||||
Testing `tesseract.exe`
|
||||
=======================
|
||||
|
||||
It's usually better to make a separate directory to test
|
||||
`tesseract.exe`. To run tesseract, you either need to make sure your
|
||||
test directory contains the `tessdata` tesseract language data folder or
|
||||
you set the ``TESSDATA_PREFIX`` environment variable to point to it. See
|
||||
http://code.google.com/p/tesseract-ocr/wiki/ReadMe for important
|
||||
details.
|
||||
|
||||
For example, you can use the following directory structure::
|
||||
|
||||
C:\BuildFolder\
|
||||
include\
|
||||
lib\
|
||||
tesseract-3.02\
|
||||
testing\
|
||||
tessdata\
|
||||
|
||||
Copy your tesseract executable to `C:\\BuildFolder\\testing`. If you
|
||||
built a DLL version then be sure to also copy the required DLLs to the
|
||||
same directory (or add `C:\\BuildFolder\\lib` to your ``PATH`` --
|
||||
However, this isn't really recommended).
|
||||
|
||||
For example, if you are trying to run `tesseractd.exe` then you'll need
|
||||
to also copy the following to `C:\\BuildFolder\\testing`::
|
||||
|
||||
liblept168d.dll
|
||||
libtesseract302d.dll
|
||||
|
||||
Copy a few test images to `C:\\BuildFolder\\testing` just to make it easy
|
||||
to run test commands.
|
||||
|
||||
Test tesseract by doing something like the following::
|
||||
|
||||
tesseractd.exe eurotext.tif eurotext
|
||||
|
||||
This will create a file called `eurotext.txt` that will contain the
|
||||
result of OCRing `eurotext.tif`.
|
||||
|
||||
|
||||
Building the training applications
|
||||
==================================
|
||||
|
||||
The training related applications are built using the following
|
||||
projects::
|
||||
|
||||
ambiguous_words
|
||||
classifier_tester
|
||||
cntraining
|
||||
combine_tessdata
|
||||
dawg2wordlist
|
||||
mftraining
|
||||
shapeclustering
|
||||
unicharset_extractor
|
||||
wordlist2dawg
|
||||
|
||||
.. note::
|
||||
|
||||
Currently these applications can **ONLY** be built with the LIB_Debug
|
||||
and LIB_Release configurations. If you try to use a DLL configuration
|
||||
you'll get "undefined external symbol" errors.
|
||||
|
||||
To build one of the above training applications, simply right-click one
|
||||
of the projects in the Solution Explorer, and choose
|
||||
:menuselection:`B&uild` from the pop-up menu.
|
||||
|
||||
Alternatively, you can build :bi:`everything` in the Solution by
|
||||
choosing :menuselection:`&Build --> &Build Solution` (:kbd:`Ctrl+Shift+B`)
|
||||
from the menu bar.
|
||||
|
||||
See http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3 for
|
||||
more information on using these applications.
|
||||
|
||||
|
||||
.. _building-with-vc2008-express:
|
||||
|
||||
Building |Tesseractocr| with Visual C++ 2008 Express Edition
|
||||
============================================================
|
||||
|
||||
The Solution file that comes with |Tesseractocr| was created with Visual
|
||||
Studio 2008, and is compatible for the most part with the free `Visual
|
||||
C++ 2008 Express Edition
|
||||
<http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express>`_. You
|
||||
might, however, sometimes see the following error message::
|
||||
|
||||
Fatal error RC1015: cannot open include file 'afxres.h'
|
||||
|
||||
.. _version-resource:
|
||||
|
||||
The Solution uses resource files to set application and DLL properties
|
||||
that are visible on Windows 7 when you right-click them in Windows
|
||||
Explorer, choose :menuselection:`Properties`, and look at the
|
||||
:guilabel:`Details` tab (the :guilabel:`Version` tab on Windows XP).
|
||||
|
||||
.. image:: images/dll_properties_details_tab.png
|
||||
:align: center
|
||||
:alt: Windows 7 Properties' Details Tab
|
||||
|
||||
Unfortunately, the Express Edition doesn't include the Resource
|
||||
Editor. So in all resource files::
|
||||
|
||||
#include "afxres.h"
|
||||
|
||||
has to be changed to::
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
If someone has used the VS2008 Resource Editor to change a `.rc` file
|
||||
associated with an application or DLL and forgotten to make these
|
||||
changes before checking the file in, you'll see the above "Fatal error"
|
||||
message. Simply manually make the change to fix the error.
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,289 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Tesseract-OCR documentation build configuration file, created by
|
||||
# sphinx-quickstart on Thu Nov 10 20:56:36 2011.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys, os
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration -----------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
needs_sphinx = '1.1'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinx.ext.todo']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Tesseract-OCR Visual Studio 2008'
|
||||
copyright = u''
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '3.02'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '3.02'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = ['_build']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# Have to turn off default python highlight language because otherwise
|
||||
# sometimes NO highlighting is done if line ends with \ char.
|
||||
highlight_language = "none"
|
||||
|
||||
|
||||
# -- Options for HTML output ---------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#html_theme = 'default'
|
||||
html_theme = 'tesseracttheme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = []
|
||||
html_theme_path = [ "" ]
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
html_title = "Visual Studio 2008 Developer Notes for Tesseract-OCR"
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
html_short_title = "Visual Studio 2008 Developer Notes"
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
html_sidebars = {
|
||||
'**' : ['globaltoc.html',
|
||||
'sourcelink.html',
|
||||
'searchbox.html',
|
||||
]
|
||||
}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
html_domain_indices = False
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
html_use_index = False
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
html_show_sourcelink = False
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
html_show_copyright = False
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'TesseractOCRdoc'
|
||||
|
||||
rst_prolog="""
|
||||
.. role:: fs
|
||||
:class: filesystem
|
||||
|
||||
.. role:: bi(emphasis)
|
||||
:class: bold-italic
|
||||
|
||||
.. role:: raw-html(raw)
|
||||
:format: html
|
||||
|
||||
.. role:: cmd
|
||||
:class: command
|
||||
|
||||
.. |libtess| replace:: :fs:`libtesseract`
|
||||
|
||||
.. |liblept| replace:: :fs:`liblept`
|
||||
|
||||
.. |Leptonica| replace:: :strong:`Leptonica`
|
||||
|
||||
.. |Tesseractocr| replace:: :strong:`Tesseract-OCR`
|
||||
|
||||
.. |BuildFolder| replace:: :fs:`BuildFolder`
|
||||
|
||||
.. |BR| replace:: :raw-html:`<br />`
|
||||
|
||||
"""
|
||||
|
||||
html_compact_lists = False
|
||||
|
||||
# -- Options for LaTeX output --------------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||
latex_documents = [
|
||||
('index', 'Tesseract-OCR.tex', u'Tesseract-OCR Documentation',
|
||||
u'', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output --------------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'tesseract-OCR', u'Tesseract-OCR Documentation',
|
||||
[u''], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output ------------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
('index', 'Tesseract-OCR', u'Tesseract-OCR Documentation',
|
||||
u'', 'TesseractOCRDocumentation', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 8.1 KiB |
@ -1,35 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
.. _vs2008_developer_notes:
|
||||
|
||||
=======================================================
|
||||
Visual Studio 2008 Developer Notes for |Tesseractocr|
|
||||
=======================================================
|
||||
|
||||
:date: February 23, 2012
|
||||
|
||||
.. toctree::
|
||||
|
||||
overview
|
||||
setup
|
||||
building
|
||||
programming
|
||||
tools
|
||||
maintenance
|
||||
vs2010-notes
|
||||
versions
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,256 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==================================
|
||||
Maintaining the VS2008 directory
|
||||
==================================
|
||||
|
||||
This section is geared towards project maintainers of the
|
||||
`tesseract-3.0x\\vs2008` directory, rather than users of it.
|
||||
|
||||
Python 2.7.x (*not* 3.x) is required for this section. The recommended
|
||||
version is the `latest from ActiveState
|
||||
<http://www.activestate.com/activepython/downloads>`_.
|
||||
|
||||
.. _tesshelper:
|
||||
|
||||
The `tesshelper.py` Python script
|
||||
=================================
|
||||
|
||||
`tesshelper.py` performs a number of useful maintenance related
|
||||
operations on the `tesseract-3.0x\\vs2008` directory. To run it, first
|
||||
open a Command Prompt window and navigate to the `<tesseract install
|
||||
dir>\\vs2008` directory.
|
||||
|
||||
Then entering the following command::
|
||||
|
||||
python tesshelper.py --help
|
||||
|
||||
displays the following help message::
|
||||
|
||||
usage: tesshelper.py [-h] [--version] tessDir {compare,report,copy,clean} ...
|
||||
|
||||
positional arguments:
|
||||
tessDir tesseract installation directory
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--version show program's version number and exit
|
||||
|
||||
Commands:
|
||||
{compare,report,copy,clean}
|
||||
compare compare libtesseract Project with tessDir
|
||||
report report libtesseract summary stats
|
||||
copy copy public libtesseract header files to includeDir
|
||||
clean clean vs2008 folder of build folders and .user files
|
||||
|
||||
Examples:
|
||||
|
||||
Assume that tesshelper.py is in c:\buildfolder\tesseract-3.01\vs2008,
|
||||
which is also the current directory. Then,
|
||||
|
||||
python tesshelper .. compare
|
||||
|
||||
will compare c:\buildfolder\tesseract-3.01 "library" directories to the
|
||||
libtesseract Project
|
||||
(c:\buildfolder\tesseract-3.01\vs2008\libtesseract\libtesseract.vcproj).
|
||||
|
||||
python tesshelper .. report
|
||||
|
||||
will display summary stats for c:\buildfolder\tesseract-3.01 "library"
|
||||
directories and the libtesseract Project.
|
||||
|
||||
python tesshelper .. copy ..\..\include
|
||||
|
||||
will copy all "public" libtesseract header files to
|
||||
c:\buildfolder\include.
|
||||
|
||||
python tesshelper .. clean
|
||||
|
||||
will clean the vs2008 folder of all build directories, and .user, .suo,
|
||||
.ncb, and other temp files.
|
||||
|
||||
Generating the documentation
|
||||
============================
|
||||
|
||||
The source files for the documentation you are currently reading are
|
||||
written in `reStructuredText
|
||||
<http://docutils.sourceforge.net/rst.html>`_ and processed with the
|
||||
`Sphinx Python Documentation Generator
|
||||
<http://sphinx.pocoo.org/index.html>`_.
|
||||
|
||||
To install Sphinx, go to your `<python.2.7.x install dir>\\scripts`
|
||||
directory and just do::
|
||||
|
||||
easy_install -U Sphinx
|
||||
|
||||
which will download Sphinx and all its dependencies. [Note: This might
|
||||
*not* install the Python Imaging Library. If not, then also do
|
||||
``easy_install -U PIL`` or download it from `here
|
||||
<http://www.pythonware.com/products/pil/>`__.]
|
||||
|
||||
To generate this |Tesseractocr| VS2008 documentation go to
|
||||
`tesseract-3.0x\\vs2008\\Sphinx` and do::
|
||||
|
||||
make clean
|
||||
make html
|
||||
|
||||
Which will create a number of items in
|
||||
`tesseract-3.0x\\vs2008\\Sphinx\\_build\\html`.
|
||||
|
||||
Copy everything there to the distribution's `tesseract-3.0x\\vs2008\\doc`
|
||||
folder, :bi:`except` for::
|
||||
|
||||
.buildinfo
|
||||
objects.inv
|
||||
|
||||
.. _updating-vs2008-directory:
|
||||
|
||||
Updating the VS2008 directory for new releases of |Tesseractocr|
|
||||
================================================================
|
||||
|
||||
1. Change the version number strings in
|
||||
`tesseract-3.0x\\vs2008\\include\\tesseract_versionnumbers.vsprops`.
|
||||
|
||||
#. Change the version number in
|
||||
`tesseract-3.0x\\vs2008\\port\\version.h`.
|
||||
|
||||
#. Open up a Command Prompt window, and do the following::
|
||||
|
||||
cd <tesseract-3.0x install dir>\vs2008
|
||||
python tesshelper .. compare
|
||||
|
||||
This will list all added and missing items in the `<tesseract-3.0x install
|
||||
dir>` directories that are used to build `libtesseract`. For the
|
||||
newly added items ignore::
|
||||
|
||||
api\tesseractmain.cpp
|
||||
api\tesseractmain.h
|
||||
ccutil\scanutils.cpp
|
||||
ccutil\scanutils.h
|
||||
|
||||
and for the newly missing items ignore::
|
||||
|
||||
training\commontraining.cpp
|
||||
training\commontraining.h
|
||||
training\tessopt.cpp
|
||||
training\tessopt.h
|
||||
|
||||
#. Open up the `tesseract.sln` in Visual Studio 2008 (or Visual C++ 2008
|
||||
Express Edition but see :ref:`this
|
||||
<building-with-vc2008-express>` first).
|
||||
|
||||
a. In the Solution Explorer, rename the :guilabel:`libtesseract-3.0x`
|
||||
Project to the correct version number to make it obvious which
|
||||
version of |Tesseractocr| this Solution is for.
|
||||
|
||||
#. Remove the missing items from the :guilabel:`libtesseract-3.0x` Project.
|
||||
|
||||
#. Add the new items to the :guilabel:`libtesseract-3.0x` Project.
|
||||
|
||||
If there were a lot of new items, you can use the `newheaders.txt`
|
||||
and `newsources.txt` files generated by running the
|
||||
`tesshelper.py` script with the ``compare`` command. Close the
|
||||
Solution, and then you can directly edit
|
||||
`libtesseract\\libtesseract.vcproj` to add them to the appropriate
|
||||
``<Filter> ... </Filter>`` section (either ``Header Files`` or
|
||||
``Source Files``).
|
||||
|
||||
#. With the Solution closed, use a text editor to change all the
|
||||
Project's `.rc` files to reflect the new version.
|
||||
|
||||
If you have a program like the *non-free* `PowerGrep
|
||||
<http://www.powergrep.com/>`_, you can use it to change all the
|
||||
`.rc` files in one fell swoop.
|
||||
|
||||
Alternatively, you can edit the Version resources within Visual
|
||||
Studio 2008 (but *not* Visual C++ 2008 Express Edition) and then
|
||||
manually make the changes mentioned :ref:`here
|
||||
<building-with-vc2008-express>` afterwards.
|
||||
|
||||
.. _copying_a_project:
|
||||
|
||||
#. If a new training application was added (edit
|
||||
`tesseract-3.0x\\training\\Makefile.am` and look at the
|
||||
``bin_PROGRAMS`` variable to see the list), the easiest thing to do
|
||||
is copy another existing training application Project and manually
|
||||
change it.
|
||||
|
||||
For example, assuming the new training application is
|
||||
called `new_trainer.exe`, with the Solution closed:
|
||||
|
||||
a. Copy the `ambiguous_words` directory to a new directory called
|
||||
`new_trainer`.
|
||||
|
||||
#. Change the `new_trainer\\ambiguous_words.rc` filename to
|
||||
`new_trainer\\new_trainer.rc`.
|
||||
|
||||
#. Change the `new_trainer\\ambiguous_words.vcproj` filename to
|
||||
`new_trainer\\new_trainer.vcproj`.
|
||||
|
||||
#. Edit `new_trainer\\new_trainer.rc` and change all occurrences of
|
||||
``ambiguous_words`` to ``new_trainer``.
|
||||
|
||||
Also change ``FileDescription`` to describe the new application.
|
||||
|
||||
#. Open up the |Tesseractocr| Solution file and right-click the
|
||||
:guilabel:`Solution:'tesseract'` in the Solution Explorer. Choose
|
||||
:menuselection:`A&dd --> &Existing Project...` from the context
|
||||
menu and add the `new_trainer\\new_trainer.vcproj` you just
|
||||
created.
|
||||
|
||||
#. Right-click the newly added Project, and choose
|
||||
:menuselection:`Project Dependencie&s...`.
|
||||
|
||||
The :guilabel:`Project Dependencies` Dialog will open. Make sure
|
||||
that `libtesseract30x` is checked. If you forget this step, Visual
|
||||
Studio will not automatically link with `libtesseract` and
|
||||
you'll get lots of "unresolved external symbol" errors.
|
||||
|
||||
This actually goes pretty fast. It should only take you a minute or
|
||||
so to add a new application to the |Tesseractocr| Solution.
|
||||
|
||||
#. (Optional?) Edit `vs2008\\Sphinx\\versions.rst` and add a new entry
|
||||
describing the changes made for this new version.
|
||||
|
||||
#. To make your working directory suitable for reposting back to the
|
||||
|Tesseractocr| SVN repository, you need to ignore all the following:
|
||||
|
||||
+ All `LIB_Release`, `LIB_Debug`, `DLL_Release`, `DLL_Debug`
|
||||
directories
|
||||
+ All `.suo` files
|
||||
+ All `.user` files
|
||||
+ All `.ncb` files
|
||||
+ `vs2008\\newheaders.txt`
|
||||
+ `vs2008\\newsources.txt`
|
||||
|
||||
Optionally, the `tesshelper.py` script has the ``clean`` command
|
||||
which will remove the above items. To run it, open a Command Prompt
|
||||
window and then do::
|
||||
|
||||
cd <tesseract-3.0x install dir>\vs2008
|
||||
python tesshelper .. clean
|
||||
|
||||
The script will respond with the following::
|
||||
|
||||
Are you sure you want to clean the
|
||||
"C:\BuildFolder\tesseract-3.0x\vs2008" folder (Yes/No) [No]? yes
|
||||
Only list the items to be deleted (Yes/No) [Yes]? no
|
||||
|
||||
You have to answer ``yes`` and then ``no`` to the prompts. Otherwise
|
||||
either the script will just exit, or only list the items that will be
|
||||
removed instead of actually removing them (which is a good thing to
|
||||
try first just in case).
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,190 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=_build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Tesseract-ocrDocumentation.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Tesseract-ocrDocumentation.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "texinfo" (
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "gettext" (
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
@ -1,87 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==========
|
||||
Overview
|
||||
==========
|
||||
|
||||
The recommended audience for this document are developers who want to
|
||||
use Microsoft Visual Studio 2008 with `Tesseract-OCR
|
||||
<http://code.google.com/p/tesseract-ocr/>`_. If you simply want to *run*
|
||||
`tesseract` or its various language training applications, then see the
|
||||
`ReadMe <http://code.google.com/p/tesseract-ocr/wiki/ReadMe>`_. You'll
|
||||
find instructions there on how to download tesseract's Windows
|
||||
installer.
|
||||
|
||||
|Tesseractocr| consists of:
|
||||
|
||||
+ `libtesseract` -- the static (or dynamic) library that does all the
|
||||
actual work. As of February 2012 it consists of 260+ `C++` files
|
||||
along with 290+ header files.
|
||||
|
||||
+ `tesseract.exe` -- the command-line OCR engine. It's built from a
|
||||
single, small `C++` file that just calls functions in
|
||||
`libtesseract`. There currently isn't very much documentation on how
|
||||
to use `tesseract.exe`, but you can look at what's there in the
|
||||
repository's `doc
|
||||
<http://code.google.com/p/tesseract-ocr/source/browse/#svn%2Ftrunk%2Fdoc>`_
|
||||
subdirectory.
|
||||
|
||||
+ Language packs -- needed by `tesseract.exe` in order to recognize
|
||||
particular languages.
|
||||
|
||||
.. _training-applications:
|
||||
|
||||
+ Language training applications -- used to teach `tesseract.exe` new
|
||||
languages. Each has their own (very brief) man page in the `doc
|
||||
<http://code.google.com/p/tesseract-ocr/source/browse/#svn%2Ftrunk%2Fdoc>`_
|
||||
subdirectory and include:
|
||||
|
||||
+ `ambiguous_words.exe` -- generate sets of words Tesseract is likely
|
||||
to find ambiguous
|
||||
|
||||
+ `classifier_tester` -- tests a Tesseract character classifier on
|
||||
data as formatted for training
|
||||
|
||||
+ `cntraining.exe` -- character normalization training
|
||||
|
||||
+ `combine_tessdata.exe` -- combine/extract/overwrite Tesseract data
|
||||
|
||||
+ `dawg2wordlist.exe` -- convert a Tesseract DAWG to a wordlist
|
||||
|
||||
+ `mftraining.exe` -- feature training
|
||||
|
||||
+ `shapeclustering.exe` -- shape clustering training
|
||||
|
||||
+ `unicharset_extractor.exe` -- extract unicharset from Tesseract
|
||||
boxfiles
|
||||
|
||||
+ `wordlist2dawg.exe` -- convert a wordlist to a DAWG
|
||||
|
||||
Their use is described in the `TrainingTesseract3
|
||||
<http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3>`_
|
||||
Wiki page.
|
||||
|
||||
This document explains how to:
|
||||
|
||||
+ :doc:`Setup <setup>` the proper directory structure required to use
|
||||
the supplied Visual Studio 2008 Solution
|
||||
|
||||
* :doc:`Build <building>` `libtesseract`, `tesseract.exe`, and the
|
||||
training apps
|
||||
|
||||
* :doc:`Write <programming>` programs that link with `libtesseract`
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,479 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
=================================
|
||||
Programming with `libtesseract`
|
||||
=================================
|
||||
|
||||
To use `libtesseract` in your own application you need to include
|
||||
|Leptonica|\ ’s `allheaders.h`, and |Tesseractocr|\ ’s `baseapi.h` and
|
||||
`strngs.h`.
|
||||
|
||||
|Tesseractocr| uses `liblept` mainly for image I/O, but you can also use
|
||||
any of |Leptonica|\ ’s *many* image processing functions on ``PIX``,
|
||||
while at the same time calling ``TessBaseAPI`` methods. See the
|
||||
`Leptonica documentation <http://tpgit.github.com/UnOfficialLeptDocs/>`_
|
||||
for more details.
|
||||
|
||||
There doesn't seem to be any documentation on `api\\baseapi.h`, but it
|
||||
has extensive comments. You can also look at the :ref:`APITest` and
|
||||
:ref:`APIExamples` projects.
|
||||
|
||||
See the :ref:`APITest` project for an example of which compiler and
|
||||
linker settings you need for various build configurations. The easiest
|
||||
way to begin a new application is to just make a copy of the `APITest`
|
||||
directory. See :ref:`this step <copying_a_project>` for detailed
|
||||
instructions (skip the last step about adding :guilabel:`Project
|
||||
Dependencies`).
|
||||
|
||||
If you want to manually set the required settings, then here's the list
|
||||
of things to do:
|
||||
|
||||
1. Add the following :guilabel:`Preprocessor Definitions` when compiling
|
||||
any files that include `baseapi.h` and you are linking with the
|
||||
static library versions of `libtesseract`::
|
||||
|
||||
USE_STD_NAMESPACE
|
||||
|
||||
If you are linking with the DLL versions of `libtesseract` instead
|
||||
add::
|
||||
|
||||
USE_STD_NAMESPACE;TESSDLL_IMPORTS;CCUTIL_IMPORTS;LIBLEPT_IMPORTS
|
||||
|
||||
#. Be sure to add the following to :guilabel:`Additional Include
|
||||
Directories`::
|
||||
|
||||
C:\BuildFolder\include
|
||||
C:\BuildFolder\include\leptonica
|
||||
|
||||
C:\BuildFolder\include\tesseract or
|
||||
|
||||
<tesseract-3.0x dir> (all its sub-directories that contain header files)
|
||||
|
||||
#. Add `C:\\BuildFolder\\lib` to your :guilabel:`Additional Library
|
||||
Directories`.
|
||||
|
||||
#. In the `C:\\BuildFolder\\include` directory are two Visual Studio
|
||||
Property Sheet files::
|
||||
|
||||
tesseract_versionnumbers.vsprops
|
||||
leptonica_versionnumbers.vsprops
|
||||
|
||||
Using `tesseract_versionnumbers.vsprops` (which automatically inherits
|
||||
`leptonica_versionnumbers.vsprops`) can make it easier to specify the
|
||||
libraries you need to import. For example, when creating a staticly
|
||||
linked debug executable you can say::
|
||||
|
||||
zlib$(ZLIB_VERSION)-static-mtdll-debug.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static-debug.lib
|
||||
|
||||
to make your application less dependent on library version numbers.
|
||||
|
||||
To add the Property Sheet to a Project, open its :guilabel:`Properties
|
||||
Pages` Dialog, and set the :guilabel:`Configuration Properties |
|
||||
General | Inherited Project Property Sheets` item to::
|
||||
|
||||
..\..\..\include\tesseract_versionnumbers.vsprops
|
||||
|
||||
Choosing :menuselection:`&View --> Oth&er Windows --> Property
|
||||
&Manager` from the menubar will let you see the Properties attached
|
||||
to each Project's configurations.
|
||||
|
||||
.. note::
|
||||
|
||||
The DLL versions of |libtess| currently only export the
|
||||
``TessBaseAPI`` C++ class from `baseapi.h`, there is no C function
|
||||
interface yet.
|
||||
|
||||
.. note::
|
||||
|
||||
The DLL versions of `libtesseract` currently only export the
|
||||
``TessBaseAPI`` and ``STRING`` classes. In theory, all you need is
|
||||
are those classes. However, if you find yourself having to manipulate
|
||||
other "internal" tesseract objects then you currently have to link
|
||||
with the **static library** versions of `libtesseract`.
|
||||
|
||||
.. warning::
|
||||
|
||||
The Release versions of |liblept|, by design, *never* print out any
|
||||
possibly helpful messages to the console. Therefore, it is highly
|
||||
recommended that you do your initial development using the Debug
|
||||
versions of |liblept|. See `Compile-time control over stderr output
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/leptonica/README.html#compile-time-control-over-stderr-output>`_
|
||||
for details.
|
||||
|
||||
<<<Need to add the URL of the zip file that contains include & lib
|
||||
directory contents for those people who don't want to build libtesseract
|
||||
themselves>>>
|
||||
|
||||
|
||||
Debugging Tips
|
||||
==============
|
||||
|
||||
Before debugging programs written with `libtesseract`, you should first
|
||||
download the latest Leptonica sources (currently
|
||||
`leptonica-1.68.tar.gz`) and VS2008 source package (`vs2008-1.68.zip`)
|
||||
from:
|
||||
|
||||
+ http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68.tar.gz
|
||||
+ http://code.google.com/p/leptonica/downloads/detail?name=vs2008-1.68.zip
|
||||
|
||||
Unpack them to `C:\\BuildFolder` to get the following directory structure::
|
||||
|
||||
C:\BuildFolder\
|
||||
include\
|
||||
lib\
|
||||
leptonica-1.68\
|
||||
vs2008\
|
||||
tesseract-3.02\
|
||||
vs2008\
|
||||
testing\
|
||||
tessdata\
|
||||
|
||||
(see `Building the liblept library
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/building-liblept.html>`_
|
||||
for more information)
|
||||
|
||||
|Tesseractocr| uses |Leptonica| "under the hood" for all (most? some?)
|
||||
of its image processing operations. Having the source available (and
|
||||
compiling it in debug mode) will make it easier to see what's really
|
||||
going on.
|
||||
|
||||
You might want to add
|
||||
`C:\\BuildFolder\\leptonica-1.68\\vs2008\\leptonica.vcproj` and
|
||||
`C:\\BuildFolder\\tesseract-3.02\\vs2008\\libtesseract\\libtesseract.vcproj`
|
||||
to your solution by right-clicking it and choosing :menuselection:`A&dd -->
|
||||
&Existing Project...`. This seems to make VS2008's Intellisense `work
|
||||
better
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/building-other-programs.html#intellisense-and-liblept>`_
|
||||
when finding "external" source files.
|
||||
|
||||
Definitely create a ``TESSDATA_PREFIX``x environment variable so that it
|
||||
contains the absolute path of the directory that contains the
|
||||
``tessdata`` directory. Otherwise you'll have to put a ``tessdata``
|
||||
directory in every temporary build folder which quickly becomes painful
|
||||
(especially since tessdata has gotten very big --- 600MB!).
|
||||
|
||||
|
||||
.. _APITest:
|
||||
|
||||
APITest Sample
|
||||
==============
|
||||
|
||||
The :guilabel:`APITest` Solution contains the minimal settings needed to
|
||||
link with `libtesseract`. It demonstrates the typical situation, where
|
||||
the "external" application's source files reside *outside* of the
|
||||
`tesseract-3.0x` directory tree.
|
||||
|
||||
To build the `vs2008\\APITest` Solution, first copy it to your
|
||||
`C:\\BuildFolder` directory. This should now look like::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
tesseract\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtesseract302.dll
|
||||
libtesseract302.lib
|
||||
libtesseract302d.dll
|
||||
libtesseract302d.lib
|
||||
libtesseract302-static.lib
|
||||
libtesseract302-static-debug.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
tesseract-3.02\
|
||||
|
||||
APITest\
|
||||
baseapitester\
|
||||
baseapitester.cpp
|
||||
baseapitester.rc
|
||||
baseapitester.vcproj
|
||||
resource.h
|
||||
stdafx.cpp
|
||||
stdafx.h
|
||||
targetver.h
|
||||
APITest.sln
|
||||
|
||||
The :guilabel:`APITest` contains just the :guilabel:`baseapitester`
|
||||
project. This was created using the VS2008 :guilabel:`Win32 Console
|
||||
Application` Project Wizard and then just copying most of
|
||||
`tesseractmain.cpp` and making minor edits. Its settings correctly refer
|
||||
to the "public" `include` and `lib` directories using relative paths.
|
||||
|
||||
It assumes that the `C:\\BuildFolder\\include` directory has been
|
||||
properly setup. See :ref:`this <copying-headers>` for more details.
|
||||
|
||||
The `C:\\BuildFolder\\lib` directory will automatically get
|
||||
`libtesseract` copied to it whenever it is built.
|
||||
|
||||
The `include\\tesseract_versionnumbers.vsprops` Property Sheet is used
|
||||
to avoid explicit library version number dependencies. Precompiled
|
||||
headers are used. :guilabel:`LIB_Release`, :guilabel:`LIB_Debug`,
|
||||
:guilabel:`DLL_Release`, and :guilabel:`DLL_Debug` build configurations
|
||||
are supported.
|
||||
|
||||
The following are the compiler command lines and linker options
|
||||
used. See `Compiling a C/C++ Program | Compiler Options
|
||||
<http://msdn.microsoft.com/en-us/library/9s7c9wdw(v=vs.90).aspx>`_ for a
|
||||
detailed explanation of these options.
|
||||
|
||||
.. _apitest-lib-release:
|
||||
|
||||
:guilabel:`LIB_Release` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/O2
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "NDEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/FD /EHsc /MD /Yc"stdafx.h"
|
||||
/Fp"LIB_Release\baseapitester.pch" /Fo"LIB_Release\\"
|
||||
/Fd"LIB_Release\vc90.pdb"
|
||||
/W3 /nologo /c
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`LIB_Release` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
zlib$(ZLIB_VERSION)-static-mtdll.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static.lib
|
||||
|
||||
:guilabel:`LIB_Debug` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/Od
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "_DEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/FD /EHsc /RTC1 /MDd /Yc"stdafx.h"
|
||||
/Fp"LIB_Debug\baseapitesterd.pch" /Fo"LIB_Debug\\"
|
||||
/Fd"LIB_Debug\vc90.pdb"
|
||||
/W3 /nologo /c /Z7
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`LIB_Debug` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
zlib$(ZLIB_VERSION)-static-mtdll-debug.lib
|
||||
libpng$(LIBPNG_VERSION)-static-mtdll-debug.lib
|
||||
libjpeg$(LIBJPEG_VERSION)-static-mtdll-debug.lib
|
||||
giflib$(GIFLIB_VERSION)-static-mtdll-debug.lib
|
||||
libtiff$(LIBTIFF_VERSION)-static-mtdll-debug.lib
|
||||
liblept$(LIBLEPT_VERSION)-static-mtdll-debug.lib
|
||||
libtesseract$(LIBTESS_VERSION)-static-debug.lib
|
||||
|
||||
:guilabel:`DLL_Release` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/O2
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "NDEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/D "TESSDLL_IMPORTS" /D "CCUTIL_IMPORTS" /D "LIBLEPT_IMPORTS"
|
||||
/FD /EHsc /MD /Yc"stdafx.h"
|
||||
/Fp"DLL_Release\baseapitester-dll.pch" /Fo"DLL_Release\\"
|
||||
/Fd"DLL_Release\vc90.pdb"
|
||||
/W3 /nologo /c
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`DLL_Release` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
liblept$(LIBLEPT_VERSION).lib
|
||||
libtesseract$(LIBTESS_VERSION).lib
|
||||
|
||||
:guilabel:`DLL_Debug` C/C++ :guilabel:`Command Line`::
|
||||
|
||||
/Od
|
||||
/I "." /I "..\..\include" /I "..\..\include\leptonica"
|
||||
/I "..\..\include\tesseract"
|
||||
/D "WIN32" /D "_WINDOWS" /D "_DEBUG"
|
||||
/D "USE_STD_NAMESPACE" /D "_MBCS"
|
||||
/D "TESSDLL_IMPORTS" /D "CCUTIL_IMPORTS" /D "LIBLEPT_IMPORTS"
|
||||
/FD /EHsc /RTC1 /MDd /Yc"stdafx.h"
|
||||
/Fp"DLL_Debug\baseapitester-dlld.pch" /Fo"DLL_Debug\\"
|
||||
/Fd"DLL_Debug\vc90.pdb"
|
||||
/W3 /nologo /c /Z7
|
||||
/wd4244 /wd4305 /wd4018 /wd4267 /wd4996 /wd4800 /wd4005 /wd4355 /wd4099 /wd4566
|
||||
/errorReport:prompt
|
||||
|
||||
:guilabel:`DLL_Debug` Linker :guilabel:`Additional Dependencies`::
|
||||
|
||||
ws2_32.lib
|
||||
user32.lib
|
||||
liblept$(LIBLEPT_VERSION)d.lib
|
||||
libtesseract$(LIBTESS_VERSION)d.lib
|
||||
|
||||
|
||||
.. _APIExamples:
|
||||
|
||||
APIExamples
|
||||
===========
|
||||
|
||||
<<<NEEDS WORK>>>
|
||||
|
||||
Currently two Projects are in this solution:
|
||||
|
||||
+ preprocessing -- Demonstrates how to use |Leptonica|\ ’s image
|
||||
processing functions to clean up images *before* calling
|
||||
``TessBaseAPI::SetImage()``.
|
||||
|
||||
+ getinfo -- Demonstrates calling various ``TessBaseAPI`` methods to get
|
||||
back information on the OCR process.
|
||||
|
||||
|
||||
|
||||
|Tesseractocr| preprocessor definitions
|
||||
=======================================
|
||||
|
||||
``HAVE_CONFIG_H``
|
||||
Only defined when building under Linux. This causes the inclusion of
|
||||
`config_auto.h`, which is only auto-generated during the `./configure`
|
||||
process and thus *not* visible on Windows.
|
||||
|
||||
This is what sets the ``VERSION`` macro (and lots of other
|
||||
configuration related macros).
|
||||
|
||||
|
||||
``TESSDLL_EXPORTS``
|
||||
Only used when *building* DLL versions of |libtess|.
|
||||
|
||||
``TESSDLL_IMPORTS``
|
||||
Should be defined when building apps that link to a DLL version of
|
||||
|libtess|. Used as follows in `baseapi.h`::
|
||||
|
||||
#ifdef TESSDLL_EXPORTS
|
||||
#define TESSDLL_API __declspec(dllexport)
|
||||
#elif defined(TESSDLL_IMPORTS)
|
||||
#define TESSDLL_API __declspec(dllimport)
|
||||
#else
|
||||
#define TESSDLL_API
|
||||
#endif
|
||||
|
||||
If you don't define this then you'll get "undefined external symbol"
|
||||
errors.
|
||||
|
||||
``TESSDLL_API``
|
||||
Used to mark classes for export (visibility) in DLL versions of
|
||||
|libtess|. Currently *only* used with the ``TestBaseAPI`` class.
|
||||
|
||||
|
||||
``CCUTIL_EXPORTS``
|
||||
Only used when *building* DLL versions of |libtess|.
|
||||
|
||||
``CCUTIL_IMPORTS``
|
||||
Should be defined when building apps that link to a DLL version of
|
||||
|libtess|. Used as follows in `strngs.h`::
|
||||
|
||||
#ifdef CCUTIL_EXPORTS
|
||||
#define CCUTIL_API __declspec(dllexport)
|
||||
#elif defined(CCUTIL_IMPORTS)
|
||||
#define CCUTIL_API __declspec(dllimport)
|
||||
#else
|
||||
#define CCUTIL_API
|
||||
#endif
|
||||
|
||||
If you don't define this then you'll get "undefined external symbol STRING"
|
||||
errors.
|
||||
|
||||
|
||||
``LIBLEPT_IMPORTS``
|
||||
Should be defined when building apps that link to a DLL version of
|
||||
|Leptonica|. Used as follows in environ.h::
|
||||
|
||||
#if defined(LIBLEPT_EXPORTS) || defined(LEPTONLIB_EXPORTS)
|
||||
#define LEPT_DLL __declspec(dllexport)
|
||||
#elif defined(LIBLEPT_IMPORTS) || defined(LEPTONLIB_IMPORTS)
|
||||
#define LEPT_DLL __declspec(dllimport)
|
||||
#else
|
||||
#define LEPT_DLL
|
||||
#endif
|
||||
|
||||
If you don't define this then you'll get "undefined external symbol"
|
||||
errors.
|
||||
|
||||
``USE_STD_NAMESPACE``
|
||||
Causes the following to be done::
|
||||
|
||||
#ifdef USE_STD_NAMESPACE
|
||||
using std::string;
|
||||
using std::vector;
|
||||
#endif
|
||||
|
||||
|
||||
``_WIN32``
|
||||
Used to indicate that the build target is Windows 32-bit or
|
||||
64-bit (``WIN32`` and ``WINDOWS`` are also added by the New Project
|
||||
Wizards).
|
||||
|
||||
See `C/C+ Preprocessor Reference | The Preprocessor | Macros |
|
||||
Predefined Macros
|
||||
<http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.90).aspx>`_ for
|
||||
the complete list for Visual Studio 2008.
|
||||
|
||||
``_MSC_VER``
|
||||
Used to check specifically for building with the VC++ compiler (as
|
||||
opposed to the MinGW gcc compiler).
|
||||
|
||||
``_USRDLL``
|
||||
Only defined when building the DLL versions of `libtesseract`.
|
||||
|
||||
``_MBCS``
|
||||
Automatically defined when :guilabel:`Configuration Properties |
|
||||
General | Character Set` is set to :guilabel:`Use Multi-Byte
|
||||
Character Set`.
|
||||
|
||||
|
||||
``DLLSYM``
|
||||
`Obsolete
|
||||
<http://groups.google.com/group/tesseract-dev/msg/5e0f7f7fab27b463>`_
|
||||
and can be ignored.
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,278 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
===========================
|
||||
Setting up |Tesseractocr|
|
||||
===========================
|
||||
|
||||
The Visual Studio 2008 Solutions included with |Tesseractocr|, rely on
|
||||
*relative paths* to reference files and directories --- including
|
||||
locations that are *outside* of the `tesseract-3.0x` tree. It is
|
||||
therefore vitally important to correctly set up the directories for the
|
||||
various components. This section describes how to do this.
|
||||
|
||||
|
||||
.. _directory-setup:
|
||||
|
||||
Initial "Build" directory setup
|
||||
===============================
|
||||
|
||||
First create an empty directory where you will unpack all the required
|
||||
downloads. Assume you call this directory `C:\\BuildFolder`.
|
||||
|
||||
.. _download-leptonica:
|
||||
|
||||
1. Download the |Leptonica| 1.68 pre-built binary package
|
||||
(`leptonica-1.68-win32-lib-include-dirs.zip`) from:
|
||||
|
||||
http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip
|
||||
|
||||
and unpack it to `C:\\BuildFolder`.
|
||||
|
||||
2. |Leptonica|, even on Windows as of v1.68, still requires a few unix
|
||||
utilities (like `rm`, `diff`, `sleep`). The easiest way to deal with
|
||||
this is to follow the instructions at `Installing Cygwin coreutils
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-cygwin.html>`_.
|
||||
|
||||
At this point, if all you want to do is link with `libtesseract` you can
|
||||
`download <http://code.google.com/p/tesseract-ocr/downloads/list>`_ the
|
||||
file that just contains the "public" |Tesseractocr| headers along with
|
||||
the precompiled library binaries for Windows. Unpack it to
|
||||
`C:\\BuildFolder` and you'll now have::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
tesseract\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtesseract302.dll
|
||||
libtesseract302.lib
|
||||
libtesseract302d.dll
|
||||
libtesseract302d.lib
|
||||
libtesseract302-static.lib
|
||||
libtesseract302-static-debug.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
and you can skip the rest of this page and go directly to
|
||||
:doc:`programming`.
|
||||
|
||||
The recommended action, however, is to download the |Tesseractocr|
|
||||
sources and build them yourself. Therefore...
|
||||
|
||||
3. Download the |Tesseractocr| Visual Studio 2008 source files from the
|
||||
`downloads page
|
||||
<http://code.google.com/p/tesseract-ocr/downloads/list>`_. If, for
|
||||
example, you'd like to build v3.02 you would use the following link:
|
||||
|
||||
http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02-vs2008.zip
|
||||
|
||||
Unpack the file to `C:\\BuildFolder`
|
||||
|
||||
You would now have the following directory structure::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
|
||||
leptonica_versionnumbers.vsprops
|
||||
tesseract_versionnumbers.vsprops
|
||||
|
||||
lib\
|
||||
giflib416-static-mtdll-debug.lib
|
||||
giflib416-static-mtdll.lib
|
||||
libjpeg8c-static-mtdll-debug.lib
|
||||
libjpeg8c-static-mtdll.lib
|
||||
liblept168-static-mtdll-debug.lib
|
||||
liblept168-static-mtdll.lib
|
||||
liblept168.dll
|
||||
liblept168.lib
|
||||
liblept168d.dll
|
||||
liblept168d.lib
|
||||
libpng143-static-mtdll-debug.lib
|
||||
libpng143-static-mtdll.lib
|
||||
libtiff394-static-mtdll-debug.lib
|
||||
libtiff394-static-mtdll.lib
|
||||
zlib125-static-mtdll-debug.lib
|
||||
zlib125-static-mtdll.lib
|
||||
|
||||
tesseract-3.02\
|
||||
vs2008\
|
||||
ambiguous_words\
|
||||
classifier_tester\
|
||||
cntraining\
|
||||
combine_tessdata\
|
||||
dawg2wordlist\
|
||||
doc\
|
||||
include\
|
||||
libtesseract\
|
||||
libtesseract.vcproj
|
||||
mftraining\
|
||||
port\
|
||||
shapeclustering\
|
||||
sphinx\
|
||||
tesseract\
|
||||
tesseract.vcproj
|
||||
unicharset_extractor\
|
||||
wordlist2dawg\
|
||||
|
||||
tesseract.sln
|
||||
tesshelper.py
|
||||
|
||||
4. Download the |Tesseractocr| source files for the same version as the
|
||||
VS2008 files you just unpacked. In this case, the proper link would
|
||||
be:
|
||||
|
||||
http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.tar.gz
|
||||
|
||||
Unpack the file to `C:\\BuildFolder`
|
||||
|
||||
This will add a bunch of directories to your already existing
|
||||
`C:\\BuildFolder\\tesseract-3.0x` directory. You should now have (for
|
||||
v3.02)::
|
||||
|
||||
C:\BuildFolder\
|
||||
|
||||
include\
|
||||
leptonica\
|
||||
lib\
|
||||
tesseract-3.02\
|
||||
api\
|
||||
ccmain\
|
||||
ccstruct\
|
||||
ccutil\
|
||||
classify\
|
||||
config\
|
||||
contrib\
|
||||
cube\
|
||||
cutil\
|
||||
dict\
|
||||
doc\
|
||||
image\
|
||||
java\
|
||||
image\
|
||||
neural_networks\
|
||||
tessdata\
|
||||
testing\
|
||||
textord\
|
||||
training\
|
||||
viewer\
|
||||
vs2008\
|
||||
wordrec\
|
||||
|
||||
.. _copying-headers:
|
||||
|
||||
If you are planning on writing applications that link with
|
||||
|Tesseractocr|, and you don't want to add all the `tesseract-3.0x`
|
||||
directories to your project's list of ``include`` directories, then do
|
||||
this additional step:
|
||||
|
||||
5. Copy all the required headers to the "public" include folder.
|
||||
|
||||
If you already have a `C:\\BuildFolder\\include\\tesseract`
|
||||
directory you should delete it in case some of the files have been
|
||||
removed.
|
||||
|
||||
Then use the python `tess-helper.py` script to copy (possibly updated
|
||||
versions of) the required headers by doing::
|
||||
|
||||
cd C:\BuildFolder\tesseract-3.02\vs2008
|
||||
python tesshelper.py .. copy ..\..\include
|
||||
|
||||
See :ref:`tesshelper` for more details.
|
||||
|
||||
You are now ready to :doc:`build <building>` |Tesseractocr| using Visual
|
||||
Studio 2008.
|
||||
|
||||
|
||||
.. _using-latest-sources:
|
||||
|
||||
Using the latest |Tesseractocr| sources
|
||||
=======================================
|
||||
|
||||
If you'd like to try the absolute latest version of |Tesseractocr|,
|
||||
here's how to download the source files from its SVN repository:
|
||||
|
||||
1. Follow Steps 1 and 2 :ref:`above <directory-setup>`.
|
||||
|
||||
#. `Checkout <http://code.google.com/p/tesseract-ocr/source/checkout>`_
|
||||
the |Tesseractocr| sources to a directory on your computer. This
|
||||
directory should :bi:`not` be `C:\\BuildFolder`!
|
||||
|
||||
If you are unfamiliar with `SVN <http://subversion.apache.org/>`_,
|
||||
the easiest way to do this is to first download and install
|
||||
`TortoiseSVN <http://tortoisesvn.net/>`_ and then:
|
||||
|
||||
a. Right-click the (empty) directory where you want the working copy
|
||||
and choose :menuselection:`SVN Chec&kout...` from
|
||||
the pop-up menu.
|
||||
|
||||
#. Enter ``http://tesseract-ocr.googlecode.com/svn/trunk/`` for
|
||||
:guilabel:`&URL of repository`. You can keep all the other
|
||||
settings at their defaults.
|
||||
|
||||
.. image:: images/tortoisesvn_checkout.png
|
||||
:align: center
|
||||
:alt: TortoiseSVN Checkout Dialog Box
|
||||
|
||||
#. Click the :guilabel:`&OK` button to commence downloading the
|
||||
|Tesseractocr| sources to your computer. This might take a while as
|
||||
the language data in the `tessdata` directory is quite large. As
|
||||
of February 2012, about 335MB needs to be transferred for the
|
||||
initial checkout. The total size of the resulting working copy is
|
||||
about 1.2GB.
|
||||
|
||||
#. Keeping your working copy up to date after this is as simple as
|
||||
right-clicking its directory and choosing :menuselection:`SVN
|
||||
&Update`. Unlike the initial checkout, this will usually finish
|
||||
very quickly.
|
||||
|
||||
#. Copy the :bi:`contents` of your working directory, except for the
|
||||
`tessdata` directory, to `C:\\BuildFolder\\tesseract-3.0x`, where
|
||||
``x`` should probably be the latest stable release + ``alpha``,
|
||||
``beta``, etc.
|
||||
|
||||
#. Optionally, follow Step 5 from :ref:`above <copying-headers>`.
|
||||
|
||||
#. You'll probably want to set an environment varible named
|
||||
``TESSDATA_PREFIX`` to point at your working copy directory (since
|
||||
that now contains the latest `tessdata` directory).
|
||||
|
||||
#. If someone hasn't already done so, you have to proceed to
|
||||
:ref:`updating-vs2008-directory`. You can skip all the steps that
|
||||
relate to updating the version number. Otherwise, depending on how
|
||||
many changes have been made since the last stable release, you may
|
||||
have little or no work to do.
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,13 +0,0 @@
|
||||
{# -*- mode: jinja-html-mumamo;-*- #}
|
||||
{#
|
||||
leptonicatheme/globaltoc.html
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Sphinx sidebar template: global table of contents.
|
||||
|
||||
:copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
#}
|
||||
{# <h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3> #}
|
||||
{{ toctree(maxdepth=4) }}
|
||||
|
@ -1,14 +0,0 @@
|
||||
{# -*- mode: jinja-html-mumamo;-*- #}
|
||||
{% extends "default/layout.html" %}
|
||||
|
||||
{%- block extrahead %}
|
||||
{{ super() }}
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:regular,bold' rel='stylesheet' type='text/css'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
{% endblock %}
|
||||
|
||||
{% block rootrellink %}
|
||||
<li><a href="http://code.google.com/p/tesseract-ocr/">Tesseract-OCR Home</a>{{ reldelim1 }}</li>
|
||||
{{ super() }}
|
||||
{% endblock %}
|
@ -1,342 +0,0 @@
|
||||
@import url("default.css");
|
||||
|
||||
/* tesseract custom styles */
|
||||
|
||||
div.body {
|
||||
font-family: 'Droid Serif', Georgia, serif;
|
||||
background-color: #FFFFE4;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding-top: 0; /* to get feynman diagram to align at top correctly */
|
||||
}
|
||||
|
||||
div.bodywrapper {
|
||||
margin: 0 0 0 330px;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
padding: 10px, 0, 0, 0;
|
||||
}
|
||||
|
||||
div.body h1,
|
||||
div.body h2,
|
||||
div.body h3,
|
||||
div.body h4,
|
||||
div.body h5,
|
||||
div.body h6 {
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup
|
||||
{
|
||||
font-size: 70%;
|
||||
}
|
||||
|
||||
.caption {
|
||||
font-weight: bold;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
div.document
|
||||
li.toctree-l1 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
list-style: square outside none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar a.current {
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
div.body p,
|
||||
div.body dd,
|
||||
div.body li {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.legend {
|
||||
width: 75%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: -1em;
|
||||
}
|
||||
|
||||
div.legend pre {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- hyperlink styles ------------------------------------------------------ */
|
||||
|
||||
a:visited {
|
||||
color: #7C3578;
|
||||
}
|
||||
|
||||
a.external,
|
||||
a.external:visited {
|
||||
border-bottom: 1px dashed;
|
||||
}
|
||||
|
||||
a.external:hover {
|
||||
text-decoration: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* ----- */
|
||||
|
||||
div.admonition.tip {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
div.container.subtitle {
|
||||
font-size: 160%;
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
font-weight: normal;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
blockquote.epigraph {
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
margin:1em;
|
||||
padding: 0 1em;
|
||||
}
|
||||
|
||||
/* table definitions from Python 2.6 docs basic.css */
|
||||
|
||||
table.docutils {
|
||||
border: 1px solid #dce;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.docutils td {
|
||||
/* padding: 2px 5px 2px 5px; */
|
||||
border: 1px solid #dce;
|
||||
background-color: #eef;
|
||||
}
|
||||
|
||||
table.docutils th {
|
||||
border: 1px solid #cac;
|
||||
background-color: #ede;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
th.head {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
th.head p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* modified p style within tables, normally
|
||||
padding-top: 0;
|
||||
margin-bottom: 1em;
|
||||
*/
|
||||
|
||||
table.docutils td,
|
||||
table.docutils th,
|
||||
table p {
|
||||
padding: 0.25em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
table div {
|
||||
padding: 0.25em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
table div div {
|
||||
padding: 0em;
|
||||
}
|
||||
|
||||
table .line-block {
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
td {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
table.centered {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.centercells td,
|
||||
table.centercells th
|
||||
{
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table caption {
|
||||
font-weight: bold;
|
||||
margin-bottom: 0.50em;
|
||||
}
|
||||
|
||||
/* custom text roles */
|
||||
|
||||
.filesystem {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%; /* this breaks IE8 wrapping calculations in sidebar? */
|
||||
}
|
||||
|
||||
.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
em.bold-italic {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.underline {
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
|
||||
img.border {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
li img {
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
/* Standard (after modifications) Sphinx inline roles */
|
||||
/*
|
||||
|
||||
.command,
|
||||
.kbd,
|
||||
.makevar,
|
||||
.program,
|
||||
.regexp
|
||||
{
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
}
|
||||
*/
|
||||
|
||||
.kbd,
|
||||
.makevar,
|
||||
.program,
|
||||
.regexp
|
||||
{
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
white-space: pre-wrap;
|
||||
background-color: #ecf0f3;
|
||||
padding: 0 1px 0 1px;
|
||||
}
|
||||
|
||||
|
||||
.command,
|
||||
.makevar,
|
||||
.program
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.command {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
em.guilabel {
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
em.menuselection {
|
||||
font-family: 'Droid Sans', sans-serif;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* definition */
|
||||
em.dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* glossary term */
|
||||
em.std-term {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
tt.file {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/* for "optional" parts of files */
|
||||
tt.file em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* sort-filter-table.css stuff */
|
||||
|
||||
/* Striping */
|
||||
tr.alternate td {
|
||||
background-color:#FCFFEE;
|
||||
}
|
||||
|
||||
/* for docutil generated TOC */
|
||||
div.body
|
||||
div.contents
|
||||
p
|
||||
{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* for collapsible sidebar */
|
||||
div#sidebarbutton {
|
||||
background-color: #267FA5;
|
||||
}
|
||||
|
||||
/* TODO list colors */
|
||||
div.admonition-todo {
|
||||
color: #B83373;
|
||||
}
|
||||
|
||||
div.admonition-todo p.admonition-title{
|
||||
color: #5032B3;
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
[theme]
|
||||
inherit = default
|
||||
stylesheet = tesseract.css
|
||||
pygments_style = sphinx
|
||||
|
||||
[options]
|
||||
collapsiblesidebar = true
|
||||
externalrefs = true
|
@ -1,252 +0,0 @@
|
||||
:version: $RCSfile: index.rst,v $ $Revision: 76e0bf38aaba $ $Date: 2011/03/22 00:48:41 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
==================
|
||||
Handy free tools
|
||||
==================
|
||||
|
||||
`TortoiseSVN <http://tortoisesvn.net/>`_
|
||||
----------------------------------------
|
||||
|
||||
The |Tesseractocr| source lives in an SVN repository at `Google Code
|
||||
<http://code.google.com/p/tesseract-ocr/source/checkout>`_, so to
|
||||
:ref:`build the latest versions <using-latest-sources>` you'll need to
|
||||
know SVN. For newcomers (or not), TortoiseSVN (http://tortoisesvn.net/)
|
||||
is a great alternative to the SVN command line interface.
|
||||
|
||||
"TortoiseSVN is an easy-to-use SCM / source control software for
|
||||
Microsoft Windows and possibly the best standalone Apache Subversion
|
||||
client there is. It is implemented as a Windows shell extension, which
|
||||
makes it integrate seamlessly into the Windows explorer. Since it's not
|
||||
an integration for a specific IDE you can use it with whatever
|
||||
development tools you like."
|
||||
|
||||
|
||||
`JP Software TCC/LE <http://jpsoft.com/tccle_cmd_replacement.html>`_
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Instead of using Windows' plain old Command Prompt window --- and less
|
||||
intimidating than using the bash shell from `cygwin
|
||||
<http://cygwin.com/>`_ or `MSYS <http://mingw.org/wiki/msys>`_ --- the
|
||||
"TCC/LE - Windows CMD Replacement Command Console" by JP Software is
|
||||
definitely worth trying. It is available at
|
||||
http://jpsoft.com/tccle_cmd_replacement.html.
|
||||
|
||||
For example, to look for all the settable options in |Tesseractocr|,
|
||||
try::
|
||||
|
||||
C:\BuildFolder\tesseract-3.02\
|
||||
ffind /s/v/c/t"_MEMBER" *.cpp | list/s
|
||||
|
||||
and you'll get something that looks like this in the `list` viewer::
|
||||
|
||||
---- C:\BuildFolder\tesseract-3.02\ccmain\tesseractclass.cpp
|
||||
: BOOL_MEMBER(tessedit_resegment_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_resegment_from_line_boxes, false,
|
||||
BOOL_MEMBER(tessedit_train_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_make_boxes_from_boxes, false,
|
||||
BOOL_MEMBER(tessedit_dump_pageseg_images, false,
|
||||
...
|
||||
double_MEMBER(segsearch_max_char_wh_ratio, 2.0,
|
||||
double_MEMBER(segsearch_max_fixed_pitch_char_wh_ratio, 2.0,
|
||||
BOOL_MEMBER(save_alt_choices, false,
|
||||
|
||||
413 lines in 7 files
|
||||
|
||||
(Press the :kbd:`Escape` key to exit the `list` viewer).
|
||||
|
||||
The equivalent(?) Linux incantation, copied and slightly modified from
|
||||
the grep info, is::
|
||||
|
||||
find . -name '*.cpp' -print0 | xargs -0r grep -H '_MEMBER' | less
|
||||
|
||||
Note: You can also do this directly in Visual Studio 2008, by choosing
|
||||
:menuselection:`&Edit --> &Find and Replace --> F&ind in Files`
|
||||
(:kbd:`Ctrl+Shift+F`), so maybe this wasn't the best example:
|
||||
|
||||
.. image:: images/find_in_files.png
|
||||
:align: center
|
||||
:alt: Visual Studio 2008 Find in Files Dialog
|
||||
|
||||
|
||||
`Cygwin <http://cygwin.com/>`_
|
||||
------------------------------
|
||||
|
||||
"`Cygwin <http://cygwin.com/>`_ is a collection of tools which provide a
|
||||
Linux look and feel environment for Windows."
|
||||
|
||||
|Leptonica| actually still requires a few unix utilities (like `rm`,
|
||||
`diff`, `sleep`) for some operations and might silently fail if it they
|
||||
not present (as of v1.68). The easiest way to deal with this is to
|
||||
`install Cygwin
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-cygwin.html>`_
|
||||
or MSYS (see the next section).
|
||||
|
||||
`MSYS <http://mingw.org/wiki/msys>`_
|
||||
------------------------------------
|
||||
|
||||
"`MSYS <http://mingw.org/wiki/msys>`_ is a collection of GNU utilities
|
||||
such as bash, make, gawk and grep to allow building of applications and
|
||||
programs which depend on traditionally UNIX tools to be present. It is
|
||||
intended to supplement MinGW and the deficiencies of the cmd shell."
|
||||
|
||||
|
||||
WinDiff
|
||||
-------
|
||||
|
||||
An important phase of testing `tesseract` is checking how its output
|
||||
compares to previous runs (or ground-truth files). A visual diff program
|
||||
can make that easier.
|
||||
|
||||
Microsoft's WinDiff doesn't seem to come with Visual Studio
|
||||
anymore. However it can still be downloaded from `Grig Software
|
||||
<http://www.grigsoft.com/download-windiff.htm>`_ (without having to get
|
||||
all the other stuff in the `Windows XP Service Pack 2 Support Tools
|
||||
<http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=18546>`_.
|
||||
|
||||
Other options are `KDiff3 <http://kdiff3.sourceforge.net/>`_ and
|
||||
`ExamDiff <http://www.prestosoft.com/edp_examdiff.asp>`_ (`ExamDiff Pro
|
||||
<http://www.prestosoft.com/edp_examdiffpro.asp>`_ is also recommended
|
||||
but it's not free).
|
||||
|
||||
KDiff3 doesn't seem to correctly auto-detect UTF-8 encodings so choose
|
||||
:menuselection:`&Settings --> &Configure KDiff3...` from the menubar and
|
||||
set the :guilabel:`Regional Settings` tab as follows:
|
||||
|
||||
.. image:: images/kdif3_settings.png
|
||||
:align: center
|
||||
:alt: KDiff3 Regional Settings
|
||||
|
||||
Also on the :guilabel:`Integration` tab, make sure that :guilabel:`Quit
|
||||
also via Escape key` is turned on (checked). Since IrfanView also quits
|
||||
when you press the :kbd:`Esc` key, this just makes it easy to dismiss
|
||||
both applications with the same key.
|
||||
|
||||
Here is KDiff3 showing the (slight) difference in OCR results after
|
||||
deskewing a grayscale image:
|
||||
|
||||
.. figure:: images/sample_diff.png
|
||||
:height: 512
|
||||
:align: center
|
||||
:alt: Diff in OCR after deskewing image
|
||||
:target: _images/sample_diff.png
|
||||
|
||||
`Click for larger image <_images/sample_diff.png>`__
|
||||
|
||||
|
||||
`IrfanView <http://www.irfanview.com/>`_
|
||||
----------------------------------------
|
||||
|
||||
You need some program to view the images you are trying to OCR and since
|
||||
|Leptonica| uses IrfanView (http://www.irfanview.com/) to `automatically
|
||||
display images <http://tpgit.github.com/UnOfficialLeptDocs/vs2008/installing-irfanview.html>`_,
|
||||
you might as well use it also.
|
||||
|
||||
"IrfanView is a very fast, small, compact and innovative FREEWARE (for
|
||||
non-commercial use) graphic viewer for Windows 9x, ME, NT, 2000, XP,
|
||||
Vista, Windows 7."
|
||||
|
||||
Pressing the :kbd:`I` key while viewing an image with IrfanView, will
|
||||
bring up a dialog box that shows most of its important properties (like
|
||||
bits/pixel and DPI).
|
||||
|
||||
|
||||
|
||||
`Aware Systems AsTiffTagViewer <http://www.awaresystems.be/imaging/tiff/astifftagviewer.html>`_
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
This utility, available at
|
||||
http://www.awaresystems.be/imaging/tiff/astifftagviewer.html, let's you
|
||||
easily determine TIFF image file properties.
|
||||
|
||||
"Whenever a customer reports your software doesn't handle this or that
|
||||
particular TIFF, use AsTiffTagViewer and discover why."
|
||||
|
||||
|
||||
`Dependency Walker <http://dependencywalker.com/>`_
|
||||
---------------------------------------------------
|
||||
|
||||
If you're having problems with missing module runtime errors, the
|
||||
Dependency Walker (http://dependencywalker.com/) usually can help track
|
||||
down the problem.
|
||||
|
||||
"Dependency Walker is also very useful for troubleshooting system errors
|
||||
related to loading and executing modules. Dependency Walker detects many
|
||||
common application problems such as missing modules, invalid modules,
|
||||
import/export mismatches, circular dependency errors, mismatched machine
|
||||
types of modules, and module initialization failures."
|
||||
|
||||
You probably want the 32-bit version even if you are running on a
|
||||
Windows 64-bit platform, because the current VS2008 Solution for
|
||||
|Tesseractocr| by default builds a 32-bit app. From the `FAQ
|
||||
<http://dependencywalker.com/faq.html>`_
|
||||
|
||||
"There are 32-bit and 64-bit versions Dependency Walker. All versions
|
||||
are capable or opening 32-bit and 64-bit modules. However, there are
|
||||
major advantages to using the 32-bit Dependency Walker to process 32-bit
|
||||
modules and the 64-bit Dependency Walker to process 64-bit modules.
|
||||
This is especially true when running on a 64-bit version of Windows,
|
||||
which allows execution of both 32-bit and 64-bit programs. The 32-bit
|
||||
subsystem on 64-bit Windows (known as "WOW64") has its own private
|
||||
registry, "AppPaths", "KnownDlls", system folders, and manifest
|
||||
processing. Only the 32-bit version of Dependency Walker can access
|
||||
this 32-bit environment, which is needed to accurately process a 32-bit
|
||||
module. Likewise, only the 64-bit version of Dependency Walker can
|
||||
fully access the 64-bit environment, so it should always be used for
|
||||
processing 64-bit modules."
|
||||
|
||||
.. figure:: images/dependency_walker.png
|
||||
:height: 640
|
||||
:align: center
|
||||
:alt: Dependency Walker view of tesseract-dlld.exe
|
||||
:target: _images/dependency_walker.png
|
||||
|
||||
`Click for larger image <_images/dependency_walker.png>`__
|
||||
|
||||
The above image shows Dependency Walker used on
|
||||
`tesseract-dlld.exe`. The panes show the `DLL`\ s that it is dependent
|
||||
on, the methods it actually uses from `libtesseract302d.dll`, and all
|
||||
the exported methods from `libtesseract302d.dll`. Using this it's easy
|
||||
to see that only the ``TessBaseAPI`` and ``STRING`` classes are exported
|
||||
as mentioned in :doc:`programming`.
|
||||
|
||||
`Sysinternals Process Explorer <http://technet.microsoft.com/en-us/sysinternals/bb896653>`_
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
Another essential program to help figure out what your program is doing
|
||||
is Process Explorer
|
||||
(http://technet.microsoft.com/en-us/sysinternals/bb896653).
|
||||
|
||||
"The unique capabilities of Process Explorer make it useful for tracking
|
||||
down DLL-version problems or handle leaks, and provide insight into the
|
||||
way Windows and applications work."
|
||||
|
||||
|
||||
`VMware Player <http://www.vmware.com/products/player/>`_
|
||||
---------------------------------------------------------
|
||||
|
||||
VMware Player (http://www.vmware.com/products/player/) can be used to
|
||||
install, for example, `Ubuntu 11.10 <http://www.ubuntu.com/>`_ in a
|
||||
virtual machine on Windows and see how the other half lives. It also
|
||||
helps when trying to figure out if the Windows version of `tesseract`
|
||||
acts the same way as the "original" version.
|
||||
|
||||
"VMware Player is the easiest way to run multiple operating systems at
|
||||
the same time on your PC. With its user-friendly interface, VMware
|
||||
Player makes it effortless for anyone to try out Windows 8 developer
|
||||
release, Windows 7, Chrome OS or the latest Linux releases, or create
|
||||
isolated virtual machines to safely test new software and surf the Web."
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|
@ -1,169 +0,0 @@
|
||||
:version: $RCSfile: versions.rst,v $ $Revision: 6c29e8896e5c $ $Date: 2011/03/14 21:50:44 $
|
||||
|
||||
.. default-role:: fs
|
||||
|
||||
===============
|
||||
Version Notes
|
||||
===============
|
||||
|
||||
3.02 -- February ??, 2012
|
||||
=========================
|
||||
|
||||
+ Created a completely new Visual Studio 2008 solution from scratch.
|
||||
|
||||
+ Added 64 new source files and removed the following deleted files
|
||||
(relative to v3.01):
|
||||
|
||||
+ ccutil\memblk.cpp
|
||||
+ ccutil\memblk.h
|
||||
+ ccutil\memryerr.h
|
||||
+ wordrec\pieces.h
|
||||
+ wordrec\tally.cpp
|
||||
+ wordrec\tally.h
|
||||
|
||||
+ Created :guilabel:`LIB_Release`, :guilabel:`LIB_Debug`,
|
||||
:guilabel:`DLL_Release`, and :guilabel:`DLL_Debug` build
|
||||
configurations.
|
||||
|
||||
+ Created a single `libtesseract` library and removed generation of the
|
||||
twelve sub-libraries.
|
||||
|
||||
+ Used references to `leptonica_versionnumbers.vsprops` and
|
||||
`tesseract_versionnumbers.vsprops` Property Sheets, which define
|
||||
version number "user macros", in all Visual Studio Projects. These are
|
||||
also copied to `C:\\BuildFolder\\include`, so you can refer to them in
|
||||
your own projects. By using the new ``*_VERSION`` macros, you'll be
|
||||
isolated from worrying about version number changes in the library
|
||||
filenames.
|
||||
|
||||
See :ref:`APITest's <APITest>` :ref:`LIB_Release <apitest-lib-release>` Linker
|
||||
:guilabel:`Additional Dependencies` settings for an example of what
|
||||
this looks like in practice.
|
||||
|
||||
See |Leptonica|\ ’s explanation `About version numbers in library
|
||||
filenames
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/downloading-binaries.html#about-version-numbers>`_
|
||||
for more details.
|
||||
|
||||
+ Added a :ref:`Version Resource <version-resource>` to all DLLs and
|
||||
applications.
|
||||
|
||||
+ Removed inclusion of the |Leptonica| libraries. They now have to be
|
||||
:ref:`downloaded separately <download-leptonica>`.
|
||||
|
||||
+ Changed to a :ref:`Build directory structure <directory-setup>` that
|
||||
is compatible with |Leptonica| and allows the building of
|
||||
|Tesseractocr|\ -based applications using only the `include` and `lib`
|
||||
directories.
|
||||
|
||||
+ The `libtesseract` libraries are now named as follows:
|
||||
|
||||
static libraries:
|
||||
|
||||
+ libtesseract302-static.lib
|
||||
|
||||
+ libtesseract302-static-debug.lib
|
||||
|
||||
DLLs:
|
||||
|
||||
+ libtesseract302.lib (import library)
|
||||
|
||||
+ libtesseract302.dll
|
||||
|
||||
+ libtesseract302d.lib (import library)
|
||||
|
||||
+ libtesseract302d.dll
|
||||
|
||||
+ Used compiler and linker settings based on the |Leptonica| `VS2008
|
||||
Developer package
|
||||
<http://tpgit.github.com/UnOfficialLeptDocs/vs2008/index.html>`_.
|
||||
|
||||
+ Removed all preprocessor defines of ``__MSW32__`` which is no longer
|
||||
needed.
|
||||
|
||||
+ Removed `vs2008\include\stdint.h` which is no longer required to build
|
||||
|liblept|.
|
||||
|
||||
+ Removed `vs2008\include\inttypes.h` which isn't needed to build
|
||||
|liblept|.
|
||||
|
||||
+ Turned off the following compiler warnings::
|
||||
|
||||
/wd4005: 'snprintf' : macro redefinition
|
||||
|
||||
/wd4018 'expression' : signed/unsigned mismatch
|
||||
|
||||
/wd4099 type name first seen using 'class' now seen using 'struct'
|
||||
|
||||
/wd4244 conversion from 'double' to 'float', possible loss of data
|
||||
|
||||
/wd4267 conversion from 'size_t' to 'type', possible loss of data
|
||||
|
||||
/wd4305 truncation from 'type1' to 'type2'
|
||||
|
||||
/wd4355 'this' : used in base member initializer list
|
||||
|
||||
/wd4566 character represented by universal-character-name x cannot
|
||||
be represented in the current code page
|
||||
|
||||
/wd4800 forcing value to bool 'true' or 'false' (performance warning)
|
||||
|
||||
/wd4996 'function': was declared deprecated
|
||||
|
||||
|
||||
+ Used the "C7 Compatible" Debug Information (/Z7) compiler switch,
|
||||
which puts the debugging information in the .obj files. That way we
|
||||
don't have to worry about also supplying `.pdb` files. See `/Z7,
|
||||
/Zi, /ZI (Debug Information Format)
|
||||
<http://msdn.microsoft.com/en-us/library/958x11bc(VS.90).aspx>`_ for
|
||||
more information.
|
||||
|
||||
+ Added Projects for the following new :ref:`training applications
|
||||
<training-applications>`:
|
||||
|
||||
+ ambiguous_words
|
||||
|
||||
+ classifier_tester
|
||||
|
||||
+ dawg2wordlist
|
||||
|
||||
+ shapeclustering
|
||||
|
||||
+ Moved `mathfix.h` from `vs2008\\include` to the `vs2008\\port`
|
||||
directory.
|
||||
|
||||
+ Removed Visual Studio 2010 support. See :doc:`vs2010-notes` for the
|
||||
rationale.
|
||||
|
||||
+ Created a python script called :ref:`tesshelper.py <tesshelper>`, that
|
||||
eases some maintenance tasks related to releasing future VS2008
|
||||
Solutions.
|
||||
|
||||
+ The list of "public" header files that are required to build
|
||||
"external" applications is now limited to the following 13 files::
|
||||
|
||||
api\apitypes.h
|
||||
api\baseapi.h
|
||||
ccmain\thresholder.h
|
||||
ccstruct\publictypes.h
|
||||
ccutil\errcode.h
|
||||
ccutil\fileerr.h
|
||||
ccutil\host.h
|
||||
ccutil\memry.h
|
||||
ccutil\platform.h
|
||||
ccutil\serialis.h
|
||||
ccutil\strngs.h
|
||||
ccutil\tesscallback.h
|
||||
ccutil\unichar.h
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
coding: utf-8
|
||||
mode: rst
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 72
|
||||
mode: auto-fill
|
||||
standard-indent: 3
|
||||
tab-stop-list: (3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60)
|
||||
End:
|