use of com.perl5.lang.pod.parser.psi.mixin.PodFormatterL in project Perl5-IDEA by Camelcade.
the class PodLinkCompletionProvider method processFilesCompletions.
protected boolean processFilesCompletions(@NotNull PerlCompletionProcessor completionProcessor) {
PodFormatterL linkElement = (PodFormatterL) completionProcessor.getLeafElement();
final Set<String> foundPods = new HashSet<>();
PerlPackageUtil.processIncFilesForPsiElement(linkElement, (file, classRoot) -> {
String className = PodFileUtil.getPackageNameFromVirtualFile(file, classRoot);
if (StringUtil.isNotEmpty(className)) {
boolean isBuiltIn = false;
if (StringUtil.startsWith(className, "pod::")) {
isBuiltIn = true;
className = className.substring(5);
}
if (completionProcessor.matches(className) && foundPods.add(className)) {
if (!completionProcessor.process(LookupElementBuilder.create(file, className).withIcon(PerlIcons.POD_FILE).withBoldness(isBuiltIn))) {
return false;
}
}
}
return completionProcessor.result();
}, PodFileType.INSTANCE);
return PerlPackageUtil.processPackageFilesForPsiElement(linkElement, (packageName, file) -> {
if (StringUtil.isNotEmpty(packageName) && completionProcessor.matches(packageName) && foundPods.add(packageName)) {
return PerlPackageCompletionUtil.processPackageLookupElement(file, packageName, null, completionProcessor, false);
}
return completionProcessor.result();
});
}
use of com.perl5.lang.pod.parser.psi.mixin.PodFormatterL in project Perl5-IDEA by Camelcade.
the class PodLinkDescriptor method create.
@Nullable
public static PodLinkDescriptor create(@NotNull PodFormatterL formatterL) {
PsiLinkText textElement = formatterL.getLinkTextElement();
PsiLinkName nameElement = formatterL.getLinkNameElement();
PsiLinkSection sectionElement = formatterL.getLinkSectionElement();
PsiLinkUrl linkUrlElement = formatterL.getLinkUrlElement();
if (nameElement == null && sectionElement == null && linkUrlElement == null) {
return null;
}
String linkTextText = null;
String linkTextHtml = null;
String linkName = null;
String linkSection = null;
boolean isUrl = false;
boolean isSameFile = false;
if (textElement != null) {
linkTextHtml = PodRenderUtil.renderPsiElementAsHTML(textElement);
linkTextText = PodRenderUtil.renderPsiElementAsText(textElement);
}
if (linkUrlElement != null) {
isUrl = true;
linkName = linkUrlElement.getText();
if (linkTextText == null) {
linkTextText = linkTextHtml = linkName;
}
} else if (sectionElement != null) {
linkSection = PodRenderUtil.renderPsiElementAsText(sectionElement);
if (linkTextText == null) {
linkTextHtml = PodRenderUtil.renderPsiElementAsHTML(sectionElement);
linkTextText = linkSection;
if (nameElement != null) {
linkName = nameElement.getText();
linkTextHtml = buildTitle(linkName, linkTextHtml, false);
linkTextText = buildTitle(linkName, linkTextText, false);
}
}
}
if (linkName == null) {
if (nameElement != null) {
linkName = nameElement.getText();
} else {
PsiFile containingFile = formatterL.getContainingFile();
if (containingFile instanceof PodLinkTarget) {
linkName = ((PodLinkTarget) containingFile).getPodLink();
isSameFile = true;
}
}
}
return new PodLinkDescriptor(linkName, linkSection, linkTextText, linkTextHtml, isUrl, isSameFile);
}
Aggregations