package com.kreative.paint.material; import java.io.IOException; import java.io.InputStream; import com.kreative.paint.material.alphabet.Alphabet; import com.kreative.paint.material.alphabet.AlphabetList; import com.kreative.paint.material.alphabet.AlphabetParser; public class AlphabetLoader { private final MaterialLoader loader; private final MaterialList<Alphabet> alphabets; public AlphabetLoader(MaterialLoader loader) { this.loader = loader; this.alphabets = new MaterialList<Alphabet>(); } public MaterialList<Alphabet> getAlphabets() { if (alphabets.isEmpty()) loadResources(); if (alphabets.isEmpty()) createAlphabets(); return alphabets; } private void loadResources() { for (MaterialResource r : loader.listResources()) { if (r.isFormat("alpx", false)) { try { InputStream in = r.getInputStream(); AlphabetList list = AlphabetParser.parse(r.getResourceName(), in); in.close(); for (Alphabet a : list) { if (a.letters.length > 0) { alphabets.add(a.name, a); } } } catch (IOException e) { System.err.println("Warning: Failed to compile alphabet set " + r.getResourceName() + "."); e.printStackTrace(); } } } } private void createAlphabets() { System.err.println("Notice: No alphabets found. Generating generic alphabet."); alphabets.add(Alphabet.DEFAULT_ALPHABET.name, Alphabet.DEFAULT_ALPHABET); } }