static IResourceLoader resourceLoaderFromDir(File dir) { SS titles = cast safeUnstructure(loadTextFile(newFile(dir, "snippet-titles.struct"))); assertNempty("Snippet titles", titles); Map types = cast safeUnstructure(loadTextFile(newFile(dir, "snippet-types.struct"))); ret new IResourceLoader { public S loadSnippet(S snippetID) { ret loadTextFile(newFile(dir, psI(snippetID) + ".text")); } public S getTranspiled(S snippetID) { S src = loadTextFile(newFile(dir, psI(snippetID) + ".transpiled")); if (empty(src)) print("Warning: Transpilation for " + snippetID + " not found"); ret src; } public int getSnippetType(S snippetID) { ret or0(types.get(fsI(snippetID))); } public S getSnippetTitle(S snippetID) { ret titles.get(fsI(snippetID)); } public File loadLibrary(S snippetID) { long id = psI(snippetID); if (isImageServerSnippet(id)) ret assertIsFile(oneOfTheFiles( newFile(dir, id + ".png"), newFile(id + ".gif"))); else ret assertIsFile(newFile(dir, id + ".bin")); } }; }