public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { List<ICompletionProposal> result = new ArrayList<ICompletionProposal>(); try { IDocument document = viewer.getDocument(); ITypedRegion partition = document.getPartition(offset); if (isOffsetValidForProposal(document, offset, partition.getOffset())) { result.add( new CompletionProposal("1 ", offset, 0, 2, null, "1 Heading level 1", null, null)); result.add( new CompletionProposal("1.1 ", offset, 0, 4, null, "1.1 Heading level 2", null, null)); result.add( new CompletionProposal( "1.1.1 ", offset, 0, 6, null, "1.1.1 Heading level 3", null, null)); result.add( new CompletionProposal( "1.1.1.1 ", offset, 0, 8, null, "1.1.1.1 Heading level 4", null, null)); result.add( new CompletionProposal( "1.1.1.1.1 ", offset, 0, 10, null, "1.1.1.1.1 Heading level 5", null, null)); result.add( new CompletionProposal( "1.1.1.1.1.1 ", offset, 0, 12, null, "1.1.1.1.1.1 Heading level 6", null, null)); } } catch (BadLocationException e) { CoreLog.logError("Content assist error", e); } if (result.size() > 0) { return result.toArray(new ICompletionProposal[result.size()]); } return null; }
private ITypedRegion getPartition(IDocument document, ITextSelection textSelection) { ITypedRegion region = null; if (textSelection != null) { try { region = document.getPartition(textSelection.getOffset()); } catch (BadLocationException e) { region = null; } } return region; }
/** * Returns null when no match found! Assumes the document has been partitioned via HTML partition * scanner * * @param document * @param offset * @param partitionsToSearch A collection of the string partition names to search for tags. * Optimization to avoid looking in non HTML/XML tags! * @return */ public static IRegion findMatchingTag( IDocument document, int offset, Collection<String> partitionsToSearch) { try { ITypedRegion region = document.getPartition(offset); if (!partitionsToSearch.contains(region.getType())) { return null; } String src = document.get(region.getOffset(), region.getLength()); if (src.startsWith("</")) // $NON-NLS-1$ { return findMatchingOpen(document, region, partitionsToSearch); } // Handle self-closing tags! if (src.endsWith("/>")) // $NON-NLS-1$ { return null; } return findMatchingClose(document, region, partitionsToSearch); } catch (BadLocationException e) { XMLPlugin.logError(e.getMessage(), e); } return null; }
/** * Returns the partition type located at offset in the document * * @param document - assumes document is not null * @param offset * @return String partition type */ protected String getPartitionType(IDocument document, int offset) { String type = null; try { // TODO: provide partitioning information so we're not using a default like this if (document instanceof IStructuredDocument) { type = TextUtilities.getContentType( document, IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING, offset, false); } } catch (BadLocationException e1) { } finally { if (type == null) { try { ITypedRegion region = document.getPartition(offset); if (region != null) { type = region.getType(); } } catch (BadLocationException e) { type = null; } } } return type; }