1 /*
2  * Copyright (c) 2008-2019 Emmanuel Dupuy.
3  * This project is distributed under the GPLv3 license.
4  * This is a Copyleft license that gives the user the right to use,
5  * copy and modify the code freely for non-commercial purposes.
6  */
7 
8 package org.jd.gui.api.feature;
9 
10 import java.net.URI;
11 
12 /**
13  * uri                : scheme '://' path ('?' query)? ('#' fragment)?<br>
14  * scheme             : 'generic' | 'jar' | 'war' | 'ear' | 'dex' | ...<br>
15  * path               : singlePath('!' singlePath)*<br>
16  * singlePath         : [path/to/dir/] | [path/to/file]<br>
17  * query              : queryLineNumber | queryPosition | querySearch<br>
18  * queryLineNumber    : 'lineNumber=' [numeric]<br>
19  * queryPosition      : 'position=' [numeric]<br>
20  * querySearch        : 'highlightPattern=' queryPattern '&highlightFlags=' queryFlags ('&highlightScope=' typeName)?<br>
21  * queryPattern       : [start of string] | [start of type name] | [start of field name] | [start of method name]<br>
22  * queryFlags         : 'd'? // Match declarations<br>
23  *                      'r'? // Match references<br>
24  *                      't'? // Match types<br>
25  *                      'c'? // Match constructors<br>
26  *                      'm'? // Match methods<br>
27  *                      'f'? // Match fields<br>
28  *                      's'? // Match strings<br>
29  * fragment            : fragmentType | fragmentField | fragmentMethod<br>
30  * fragmentType        : typeName<br>
31  * fragmentField       : typeName '-' [field name] '-' descriptor<br>
32  * fragmentMethod      : typeName '-' [method name] '-' methodDescriptor<br>
33  * methodDescriptor    : '(*)?' | // Match all method descriptors<br>
34  *                       '(' descriptor* ')' descriptor<br>
35  * descriptor          : '?' | // Match a primitive or a type name<br>
36  *                       '['* primitiveOrTypeName<br>
37  * primitiveOrTypeName : 'B' | 'C' | 'D' | 'F' | 'I' | 'J' | 'L' typeName ';' | 'S' | 'Z'<br>
38  * typeName            : [internal qualified name] | '*\/' [name]<br>
39  * <br>
40  * Examples:<br>
41  * <ul>
42  *  <li>file://dir1/dir2/</li>
43  *  <li>file://dir1/dir2/file</li>
44  *  <li>jar://dir1/dir2/</li>
45  *  <li>jar://dir1/dir2/file</li>
46  *
47  *  <li>jar://dir1/dir2/javafile</li>
48  *  <li>jar://dir1/dir2/javafile#type</li>
49  *  <li>jar://dir1/dir2/javafile#type-fieldName-descriptor</li>
50  *  <li>jar://dir1/dir2/javafile#type-methodName-descriptor</li>
51  *  <li>jar://dir1/dir2/javafile#innertype</li>
52  *  <li>jar://dir1/dir2/javafile#innertype-fieldName-?</li>
53  *  <li>jar://dir1/dir2/javafile#innertype-methodName-(*)?</li>
54  *  <li>jar://dir1/dir2/javafile#innertype-methodName-(?JZLjava/lang/Sting;C)I</li>
55  *  <li>jar://dir1/dir2/javafile#innertype-fieldName-descriptor</li>
56  *  <li>jar://dir1/dir2/javafile#innertype-methodName-descriptor</li>
57  *
58  *  <li>file://dir1/dir2/file?lineNumber=numeric</li>
59  *  <li>file://dir1/dir2/file?position=numeric</li>
60  *  <li>file://dir1/dir2/file?highlightPattern=hello&highlightFlags=drtcmfs&highlightScope=java/lang/String</li>
61  *  <li>file://dir1/dir2/file?highlightPattern=hello&highlightFlags=drtcmfs&highlightScope=*\/String</li>
62  * </ul>
63  */
64 public interface UriOpenable {
openUri(URI uri)65     boolean openUri(URI uri);
66 }
67