从文件摘要中获取行号

时间:2015-07-10 19:26:50

标签: java eclipse rcp emf

我想在IMarker的文件中标记一个EObject。我可以使用的是一个唯一的标识符,它作为一行的一部分出现。

如何获取包含此标识符的行号?

所以我有这个文件,其中包含几个bibtex条目,如

/*md+ DESKTOP */
 @media (min-width: 768px) {
    .collapse.navbar-collapse .nav.navbar-nav:first-child {
        border-bottom: 1px solid grey;
    }
    .collapse.navbar-collapse .container-fluid {
        float:right;
    }
    .additional-text {
        position:absolute;
        bottom:0px;
        margin-bottom:8px;
        margin-left:8px;
        font-size:22px;
        color:grey;
        cursor:arrow;
    }
}
/* md- overrides MOBILE */
 @media (max-width: 767px) {
    .collapse.navbar-collapse .nav.navbar-nav:first-child {
        border-bottom: 1px solid lightgrey;
        margin-bottom: 0px;
    }
    .collapse.navbar-collapse .nav.navbar-nav:first-child li:last-child {
        border-bottom: 1px solid lightgrey;
        margin-bottom: 0px;
    }
    .collapse.navbar-collapse .nav.navbar-nav:last-child li:first-child a {
        padding-top: 0px;
    }
    .navbar-header img {
        max-height:80px;
    }
    .collapse.navbar-collapse.in .nav.navbar-nav {
        float:none !important;
        display:block;
    }
    .additional-text {
        position:relative;
        font-size:22px;
        display:none;
    }
}

我有我的对象

@ARTICLE{Author2015,
    title={Hello World},
    ...
}
@BOOK{Author2000,
    title={Book Title},
    ...
}

我是否必须使用BibtexObject bib = ... String identifier = bib.getIdentifier(); // = "Author2000" 检查并计算每一行?

谢谢。

1 个答案:

答案 0 :(得分:0)

您没有详细说明EObject(内存中的Java对象)与磁盘上的持久文件之间的关系。默认情况下,某些XML序列化将保留您的模型,而您似乎使用其他一些文本序列化。也许Xtext?根据序列化,行号可能会有很大差异。但是,对于仅创建标记,您可能根本不需要行号。

您可以查看org.eclipse.emf.edit.ui.action.ValidateAction,了解EMF如何为验证结果创建标记。

EMF通常将其EObject URI存储为Marker而不是Numer行,因此您可以从Marker中获取它,如

String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

您可以从ResourceSet

获取相应的对象
URI uri = URI.createURI(uriAttribute);    
resource.getResourceSet().getEObject(uri, true);

反过来说,你可以创建一个新的Marker,将EValidator.URI_ATTRIBUTE设置为包含Resource的EObject的URI。你可以通过

获得
resource.getURIFragment(myEObject)

我认为EMF URI应该是独立于序列化的,因此不依赖于具体的行号。