/* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. */ package com.jpexs.decompiler.flash.tags.font; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author JPEXS */ public class CharacterRanges { public static int rangeCount() { return languages.size(); } public static String rangeName(int index) { return languages.get(index).name; } public static int glyphCount(int index) { List<Range> ranges = languages.get(index).ranges; int cnt = 0; for (Range r : ranges) { for (int i = r.from; i <= r.to; i++) { cnt++; } } return cnt; } public static List<String> rangeNames() { List<String> ret = new ArrayList<>(); for (int i = 0; i < rangeCount(); i++) { ret.add(rangeName(i)); } return ret; } public static int[] rangeCodes(int index) { List<Range> ranges = languages.get(index).ranges; List<Integer> ret = new ArrayList<>(); for (Range r : ranges) { for (int i = r.from; i <= r.to; i++) { ret.add(i); } } int[] retArr = new int[ret.size()]; for (int i = 0; i < ret.size(); i++) { retArr[i] = ret.get(i); } return retArr; } private static class Range { public int from; public int to; public Range(int fromto) { from = fromto; to = fromto; } public Range(int from, int to) { this.from = from; this.to = to; } @Override public String toString() { if (from == to) { return "" + from; } return "" + from + "-" + to; } } private static class Language { String name; List<Range> ranges; public Language(String name) { this.name = name; ranges = new ArrayList<>(); } public Language(String name, List<Range> ranges) { this.name = name; this.ranges = ranges; } } private static final List<Language> languages = new ArrayList<>(); static { BufferedReader br = new BufferedReader(new InputStreamReader(CharacterRanges.class.getResourceAsStream("/com/jpexs/decompiler/flash/tags/font/character_ranges.txt"))); String s; try { while ((s = br.readLine()) != null) { String[] parts = s.split(":"); Language lng = new Language(parts[0]); String[] ranges = parts[1].split(","); for (String r : ranges) { if (r.contains("-")) { String[] fromTo = r.split("-"); lng.ranges.add(new Range(Integer.parseInt(fromTo[0], 16), Integer.parseInt(fromTo[1], 16))); } else { lng.ranges.add(new Range(Integer.parseInt(r, 16))); } } languages.add(lng); } } catch (IOException ex) { Logger.getLogger(CharacterRanges.class.getName()).log(Level.SEVERE, "Cannot read unicode character ranges", ex); } } }