All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moandjiezana.toml.Keys Maven / Gradle / Ivy

The newest version!
package com.moandjiezana.toml;

import java.util.ArrayList;
import java.util.List;

class Keys {
  
  static class Key {
    final String name;
    final int index;
    final String path;

    Key(String name, int index, Key next) {
      this.name = name;
      this.index = index;
      if (next != null) {
        this.path = name + "." + next.path;
      } else {
        this.path = name;
      }
    }
  }

  static Keys.Key[] split(String key) {
    List splitKey = new ArrayList();
    StringBuilder current = new StringBuilder();
    boolean quoted = false;
    boolean indexable = true;
    boolean inIndex = false;
    int index = -1;
    
    for (int i = key.length() - 1; i > -1; i--) {
      char c = key.charAt(i);
      if (c == ']' && indexable) {
        inIndex = true;
        continue;
      }
      indexable = false;
      if (c == '[' && inIndex) {
        inIndex = false;
        index = Integer.parseInt(current.toString());
        current = new StringBuilder();
        continue;
      }
      if (isQuote(c) && (i == 0 || key.charAt(i - 1) != '\\')) {
        quoted = !quoted;
        indexable = false;
      }
      if (c != '.' || quoted) {
        current.insert(0, c);
      } else {
        splitKey.add(0, new Key(current.toString(), index, !splitKey.isEmpty() ? splitKey.get(0) : null));
        indexable = true;
        index = -1;
        current = new StringBuilder();
      }
    }
    
    splitKey.add(0, new Key(current.toString(), index, !splitKey.isEmpty() ? splitKey.get(0) : null));
    
    return splitKey.toArray(new Key[0]);
  }
  
  static boolean isQuote(char c) {
    return c == '"' || c == '\'';
  }

  private Keys() {}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy