Exemplo n.º 1
0
  public void popFrame() {
    int temp = peek();
    int pop = framePointers.pop();

    while (size() - 1 >= pop) {
      if (!runStack.isEmpty()) {
        pop();
      }
    }

    push(temp);
  }
 /**
  * Return the root hash of a binary tree with leaves at the given depths and with the given hash
  * val in each leaf.
  */
 byte[] hashed(byte[] val, Integer... depths) {
   ArrayDeque<Integer> dstack = new ArrayDeque<Integer>();
   ArrayDeque<byte[]> hstack = new ArrayDeque<byte[]>();
   Iterator<Integer> depthiter = Arrays.asList(depths).iterator();
   if (depthiter.hasNext()) {
     dstack.push(depthiter.next());
     hstack.push(val);
   }
   while (depthiter.hasNext()) {
     Integer depth = depthiter.next();
     byte[] hash = val;
     while (depth.equals(dstack.peek())) {
       // consume the stack
       hash = Hashable.binaryHash(hstack.pop(), hash);
       depth = dstack.pop() - 1;
     }
     dstack.push(depth);
     hstack.push(hash);
   }
   assert hstack.size() == 1;
   return hstack.pop();
 }
Exemplo n.º 3
0
 private static Record readRecord(ArrayDeque<String> stack) {
   Record rec = new Record();
   for (; ; ) {
     if (stack.isEmpty()) {
       return rec;
     }
     String line = stack.pop();
     assert !line.isEmpty();
     if ("%%".equals(line)) {
       return rec;
     }
     if (line.charAt(0) == ' ') {
       // continuation
       continue;
     }
     int sep = line.indexOf(':');
     String name = line.substring(0, sep).trim();
     String value = line.substring(sep + 1).trim();
     Field field = Field.forName(name);
     assert field != null;
     switch (field) {
       case Deprecated:
       case PreferredValue:
       case Prefix:
       case Subtag:
       case Tag:
       case Type:
         rec.entries.put(field, value);
         break;
       case Added:
       case Comments:
       case Description:
       case Macrolanguage:
       case Scope:
       case SupressScript:
       default:
         // ignore these
         break;
     }
   }
 }
Exemplo n.º 4
0
  /**
   * {@link LanguageSubtagRegistryData}
   *
   * @param langSubtagReg the language subtag registry file
   * @throws IOException if an I/O error occurs
   */
  static void languageSubtagRegistry(Path langSubtagReg) throws IOException {
    List<String> lines = Files.readAllLines(langSubtagReg, StandardCharsets.UTF_8);
    ArrayDeque<String> stack = new ArrayDeque<>(lines);

    ArrayList<Record> language = new ArrayList<>();
    ArrayList<Record> region = new ArrayList<>();
    ArrayList<Record> grandfathered = new ArrayList<>();
    ArrayList<Record> redundant = new ArrayList<>();

    ArrayList<Record> extlang = new ArrayList<>();
    ArrayList<Record> script = new ArrayList<>();
    ArrayList<Record> variant = new ArrayList<>();

    // skip first two lines (file date + %% separator)
    stack.pop();
    stack.pop();
    while (!stack.isEmpty()) {
      Record rec = readRecord(stack);
      String type = rec.get(Field.Type);
      assert type != null;
      if ("language".equals(type)) {
        if (rec.has(Field.PreferredValue)) {
          language.add(rec);
        }
      }
      if ("region".equals(type)) {
        if (rec.has(Field.PreferredValue)) {
          region.add(rec);
        }
      }
      if ("grandfathered".equals(type)) {
        grandfathered.add(rec);
      }
      if ("redundant".equals(type)) {
        if (rec.has(Field.PreferredValue)) {
          redundant.add(rec);
        }
      }
      if ("extlang".equals(type)) {
        if (rec.has(Field.PreferredValue)) {
          extlang.add(rec);
        }
      }
      if ("script".equals(type)) {
        if (rec.has(Field.PreferredValue)) {
          script.add(rec);
        }
      }
      if ("variant".equals(type)) {
        if (rec.has(Field.PreferredValue)) {
          variant.add(rec);
        }
      }
    }

    /* Generate LanguageSubtagRegistryData#scriptData entries */
    System.out.println("--- [LanguageSubtagRegistryData#scriptData] ---");
    for (Record record : script) {
      assert record.has(Field.Prefix);
      System.out.printf(
          "%s -> %s [%s]%n",
          record.get(Field.Subtag), record.get(Field.PreferredValue), record.get(Field.Prefix));
    }
    System.out.println();
    assert script.isEmpty() : "no preferred values for 'script' expected";

    /* Generate LanguageSubtagRegistryData#extlangData entries */
    System.out.println("--- [LanguageSubtagRegistryData#extlangData] ---");
    for (Record record : extlang) {
      assert record.has(Field.Prefix);
      assert record.get(Field.Subtag).equals(record.get(Field.PreferredValue))
          : record.get(Field.Subtag);
      System.out.printf(
          "map.put(\"%s\", \"%s\");%n", record.get(Field.Subtag), record.get(Field.Prefix));
    }
    System.out.println();

    /* Generate LanguageSubtagRegistryData#variantData entries */
    System.out.println("--- [LanguageSubtagRegistryData#variantData] ---");
    for (Record record : variant) {
      assert record.has(Field.Prefix);
      System.out.printf(
          "%s -> %s [%s]%n",
          record.get(Field.Subtag), record.get(Field.PreferredValue), record.get(Field.Prefix));
      System.out.printf(
          "map.put(\"%s\", \"%s\");%n", record.get(Field.Subtag), record.get(Field.PreferredValue));
    }
    System.out.println();
    assert variant.size() == 1 : "Only one variant entry expected";
    assert variant.get(0).get(Field.Subtag).equals("heploc");
    assert variant.get(0).get(Field.PreferredValue).equals("alalc97");

    /* Generate LanguageSubtagRegistryData#regionData entries */
    System.out.println("--- [LanguageSubtagRegistryData#regionData] ---");
    for (Record record : region) {
      assert !record.has(Field.Prefix);
      System.out.printf(
          "map.put(\"%s\", \"%s\");%n",
          record.get(Field.Subtag).toLowerCase(Locale.ROOT), record.get(Field.PreferredValue));
    }
    System.out.println();

    /* Generate LanguageSubtagRegistryData#languageData entries */
    System.out.println("--- [LanguageSubtagRegistryData#languageData] ---");
    for (Record record : language) {
      assert !record.has(Field.Prefix);
      System.out.printf(
          "map.put(\"%s\", \"%s\");%n", record.get(Field.Subtag), record.get(Field.PreferredValue));
    }
    System.out.println();

    /* Generate LanguageSubtagRegistryData#grandfatheredData entries */
    System.out.println("--- [LanguageSubtagRegistryData#grandfatheredData] ---");
    for (Record record : grandfathered) {
      assert !record.has(Field.Prefix);
      if (record.has(Field.PreferredValue)) {
        System.out.printf(
            "map.put(\"%s\", \"%s\");%n",
            record.get(Field.Tag).toLowerCase(Locale.ROOT), record.get(Field.PreferredValue));
      } else {
        System.out.printf(
            "map.put(\"%s\", \"%s\");%n",
            record.get(Field.Tag).toLowerCase(Locale.ROOT), record.get(Field.Tag));
      }
    }
    System.out.println();

    /* Generate LanguageSubtagRegistryData#redundantData entries */
    System.out.println("--- [LanguageSubtagRegistryData#redundantData] ---");
    for (Record record : redundant) {
      assert !record.has(Field.Prefix);
      System.out.printf(
          "map.put(\"%s\", \"%s\");%n",
          record.get(Field.Tag).toLowerCase(Locale.ROOT), record.get(Field.PreferredValue));
    }
    System.out.println();
  }