/*
* Copyright (c) 2008-2019 Emmanuel Dupuy.
* This project is distributed under the GPLv3 license.
* This is a Copyleft license that gives the user the right to use,
* copy and modify the code freely for non-commercial purposes.
*/
package org.jd.gui.api.feature;
import java.net.URI;
/**
* uri : scheme '://' path ('?' query)? ('#' fragment)?<br>
* scheme : 'generic' | 'jar' | 'war' | 'ear' | 'dex' | ...<br>
* path : singlePath('!' singlePath)*<br>
* singlePath : [path/to/dir/] | [path/to/file]<br>
* query : queryLineNumber | queryPosition | querySearch<br>
* queryLineNumber : 'lineNumber=' [numeric]<br>
* queryPosition : 'position=' [numeric]<br>
* querySearch : 'highlightPattern=' queryPattern '&highlightFlags=' queryFlags ('&highlightScope=' typeName)?<br>
* queryPattern : [start of string] | [start of type name] | [start of field name] | [start of method name]<br>
* queryFlags : 'd'? // Match declarations<br>
* 'r'? // Match references<br>
* 't'? // Match types<br>
* 'c'? // Match constructors<br>
* 'm'? // Match methods<br>
* 'f'? // Match fields<br>
* 's'? // Match strings<br>
* fragment : fragmentType | fragmentField | fragmentMethod<br>
* fragmentType : typeName<br>
* fragmentField : typeName '-' [field name] '-' descriptor<br>
* fragmentMethod : typeName '-' [method name] '-' methodDescriptor<br>
* methodDescriptor : '(*)?' | // Match all method descriptors<br>
* '(' descriptor* ')' descriptor<br>
* descriptor : '?' | // Match a primitive or a type name<br>
* '['* primitiveOrTypeName<br>
* primitiveOrTypeName : 'B' | 'C' | 'D' | 'F' | 'I' | 'J' | 'L' typeName ';' | 'S' | 'Z'<br>
* typeName : [internal qualified name] | '*\/' [name]<br>
* <br>
* Examples:<br>
* <ul>
* <li>file://dir1/dir2/</li>
* <li>file://dir1/dir2/file</li>
* <li>jar://dir1/dir2/</li>
* <li>jar://dir1/dir2/file</li>
*
* <li>jar://dir1/dir2/javafile</li>
* <li>jar://dir1/dir2/javafile#type</li>
* <li>jar://dir1/dir2/javafile#type-fieldName-descriptor</li>
* <li>jar://dir1/dir2/javafile#type-methodName-descriptor</li>
* <li>jar://dir1/dir2/javafile#innertype</li>
* <li>jar://dir1/dir2/javafile#innertype-fieldName-?</li>
* <li>jar://dir1/dir2/javafile#innertype-methodName-(*)?</li>
* <li>jar://dir1/dir2/javafile#innertype-methodName-(?JZLjava/lang/Sting;C)I</li>
* <li>jar://dir1/dir2/javafile#innertype-fieldName-descriptor</li>
* <li>jar://dir1/dir2/javafile#innertype-methodName-descriptor</li>
*
* <li>file://dir1/dir2/file?lineNumber=numeric</li>
* <li>file://dir1/dir2/file?position=numeric</li>
* <li>file://dir1/dir2/file?highlightPattern=hello&highlightFlags=drtcmfs&highlightScope=java/lang/String</li>
* <li>file://dir1/dir2/file?highlightPattern=hello&highlightFlags=drtcmfs&highlightScope=*\/String</li>
* </ul>
*/
public interface UriOpenable {
boolean openUri(URI uri);
}