eclipse-plugin - चंद्र ग्रहण आज 2018



एक्सटेक्स्ट में ऑटो सुंदर स्वरूपण (1)

मुझे यह पूछना है कि प्राथमिकता मेनू से इसे (ctrl + shift + f) बिना स्वतः एक्सटेक्स्ट में सुंदर स्वरूपण करने का एक तरीका है या इसे बदलना मैं वास्तव में क्या चाहता हूं जब भी कोई उपयोगकर्ता कोड लिखना पूरा करता है, तो यह स्वत: सुंदर रूप से स्वरूपित होता है (या रनटाइम पर) बिना (ctrl + shift + f)।


ऐसा करने का एक तरीका है जिसे "ऑटोएडिट" कहा जाता है यह वास्तव में नहीं है जब उपयोगकर्ता लेखन पूरा करता है लेकिन यह हर टोकन के साथ है यह कम से कम मैंने क्या किया है आप यह सुनिश्चित करने के लिए कर सकते हैं कि वह बदलाव मैं आपको एक उदाहरण देगा जो मैंने अपने प्रोजेक्ट के लिए खुद को लागू किया था। यह मूल रूप से हर कीवर्ड को उपयोगकर्ता प्रकार के रूप में कैपिटल करता है (रिक्त स्थान और अंतराल द्वारा ट्रिगर किया गया)।

यह एक UI चीज है इसलिए, आपके UI प्रोजेक्ट में:

MyDslUiModule.java में आपको अपने AutoEdit कस्टम किए गए क्लास को इस तरह से जोड़ना होगा:

public Class<? extends DefaultAutoEditStrategyProvider> bindDefaultAutoEditStrategyProvider() 
{
    return MyDslAutoEditStrategyProvider.class;
}

हमारे वर्ग को MyDslAutoEditStrategyProvider कहा जाएगा, तो आगे बढ़ो और इसे एक MyDslAutoEditStrategyProvider.java फ़ाइल में बनाएं। मेरा यह करना था जो मैंने परिचय में समझाया:

import java.util.Set;

import org.eclipse.jface.text.DocumentCommand;
import org.eclipse.jface.text.IAutoEditStrategy;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.xtext.GrammarUtil;
import org.eclipse.xtext.IGrammarAccess;
import org.eclipse.xtext.ui.editor.autoedit.DefaultAutoEditStrategyProvider;
import org.eclipse.xtext.ui.editor.model.XtextDocument;

import com.google.inject.Inject;
import com.google.inject.Provider;

public class MyDslAutoEditStrategyProvider extends DefaultAutoEditStrategyProvider {

@Inject
Provider<IGrammarAccess> iGrammar;

private Set<String> KWDS;

@Override
protected void configure(IEditStrategyAcceptor acceptor) {

    KWDS = GrammarUtil.getAllKeywords(iGrammar.get().getGrammar());

    IAutoEditStrategy strategy = new IAutoEditStrategy() 
    {

        @Override
        public void customizeDocumentCommand(IDocument document, DocumentCommand command) 
        {
            if ( command.text.length() == 0 || command.text.charAt(0) > ' ') return;

            IRegion reg = ((XtextDocument) document).getLastDamage();

            try {
                String token = document.get(reg.getOffset(), reg.getLength());
                String possibleKWD = token.toLowerCase();
                if ( token.equals(possibleKWD.toUpperCase()) || !KWDS.contains(possibleKWD) ) return;
                document.replace(reg.getOffset(), reg.getLength(), possibleKWD.toUpperCase());

            } 
            catch (Exception e) 
            {
                System.out.println("AutoEdit error.\n" + e.getMessage());   
            }
        }
    };

    acceptor.accept(strategy, IDocument.DEFAULT_CONTENT_TYPE);

    super.configure(acceptor);

    }
}

मैं मानता हूं कि "प्रयोक्ता पूरी तरह से लेखन करता है" हो सकता है "उपयोगकर्ता सहेजता है" यदि ऐसा है तो बचाने के लिए फ़ॉर्मेटर ट्रिगर कैसे करें:

MyDslUiModule.java में:

public Class<? extends XtextDocumentProvider> bindXtextDocumentProvider() 
{
    return MyDslDocumentProvider.class;
}

MyDslDocumentProvider वर्ग बनाएं:

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.xtext.ui.editor.model.XtextDocumentProvider;

public class MyDslDocumentProvider extends XtextDocumentProvider 
{
    @Override
    protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite)
            throws CoreException {
        IHandlerService service = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
        try {
            service.executeCommand("org.eclipse.xtext.ui.FormatAction", null);
        } catch (Exception e) 
        {
            e.printStackTrace();
        }
        super.doSaveDocument(monitor, element, document, overwrite);
    }
}