Returns path for the specified PRE value. @param data data reference @param pre PRE value @return current path
(final Data data, final int pre)
| 45 | * @return current path |
| 46 | */ |
| 47 | public static byte[] path(final Data data, final int pre) { |
| 48 | if(data == null || pre >= data.meta.size) return Token.EMPTY; |
| 49 | |
| 50 | final IntList pres = new IntList(); |
| 51 | int p = pre, k = data.kind(p); |
| 52 | while(k != Data.DOC) { |
| 53 | pres.add(p); |
| 54 | p = data.parent(p, k); |
| 55 | k = data.kind(p); |
| 56 | } |
| 57 | |
| 58 | final TokenBuilder tb = new TokenBuilder(); |
| 59 | tb.add(Function._DB_GET.args(data.meta.name, Token.string(data.text(p, true))).trim()); |
| 60 | for(int i = pres.size() - 1; i >= 0; i--) { |
| 61 | p = pres.get(i); |
| 62 | k = data.kind(p); |
| 63 | final byte[] txt = switch(k) { |
| 64 | case Data.TEXT -> TEXT; |
| 65 | case Data.COMM -> COMMENT; |
| 66 | case Data.PI -> PI; |
| 67 | case Data.ATTR -> Token.concat(XMLToken.AT, data.name(p, k)); |
| 68 | default -> data.name(p, k); |
| 69 | }; |
| 70 | tb.add('/').add(txt); |
| 71 | } |
| 72 | return tb.finish(); |
| 73 | } |
| 74 | |
| 75 | /** |
| 76 | * Returns textual contents for the specified node. |
no test coverage detected