/
IndexDocumentation.wl
78 lines (70 loc) · 2.74 KB
/
IndexDocumentation.wl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Begin["`Private`"]
DownValues[NewDocumentationNotebookIndexer]=DownValues[NewDocumentationNotebookIndexer]/.
HoldPattern@AddToClassPath[p_]:>AddToClassPath[p,Prepend->True];
Options[IndexDocumentation]=Join[{ProgressIndicator->True},Options[DocumentationCachePut]];
IndexDocumentation[dir_,useCached_,OptionsPattern[]]:=With[
{
cacheDirectory=FileNameJoin@{GetCacheDir@OptionValue["CacheDirectory"],"indexes"},
indexDirectory=FileNameJoin@{Directory[],dir,"Index"},
spellDirectory=FileNameJoin@{Directory[],dir,"SpellIndex"},
searchDirectory=FileNameJoin@{Directory[],dir,DocumentationSearch`Private`$indexName}
},
With[
{
cachedIndex=FileNameJoin@{cacheDirectory,"Index"},
cachedSpell=FileNameJoin@{cacheDirectory,"SpellIndex"},
cachedSearch=FileNameJoin@{cacheDirectory,DocumentationSearch`Private`$indexName}
},
With[
{
cachedDirs={cachedIndex,cachedSpell,cachedSearch},
dirs={indexDirectory,spellDirectory,searchDirectory}
},
If[OptionValue[ProgressIndicator],PrintTemporary@"Creating documentation index..."];
If[
!useCached||
!AllTrue[cachedDirs,DirectoryQ]||
Check[
MapThread[CopyDirectory,{cachedDirs,dirs}];
False,
Quiet[DeleteDirectory[#,DeleteContents->True]&/@Join[dirs,cachedDirs]];
True
],
With[
{
oldJVM=JLink`Package`getDefaultJVM[],
oldCP=JavaClassPath[]
},
Internal`WithLocalSettings[
(* use separate JVM for indexer, as old lucene library breaks help center *)
InstallJava[ForceLaunch->True,Default->True],
With[
{indexer=NewDocumentationNotebookIndexer@indexDirectory},
AddDocumentationNotebook[indexer,#]&/@FileNames["*.nb",dir,\[Infinity]];
CloseDocumentationNotebookIndexer@indexer;
CreateSpellIndex[indexDirectory,spellDirectory];
],
UninstallJava[];
(*reset classpath to ensure new lucene is found on new JVMs*)
JLink`Package`$currentClassPath=oldCP;
JLink`Package`setDefaultJVM[oldJVM];
];
CreateDirectory@searchDirectory;
First[(*get the JavaObject of the newly created search index to close it*)
TextSearch`PackageScope`createHandle[
Quiet@CreateDocumentationIndex[
dir,
searchDirectory,
DocumentationSearch`Private`$indexVersion
]
]
]@close[];
];
Quiet@CreateDirectory[cacheDirectory];
Quiet[DeleteDirectory[#,DeleteContents->True]&/@cachedDirs];
MapThread[CopyDirectory,{dirs,cachedDirs}];
]
]
]
]
End[]