Package org.rstudio.studio.client.workbench.views.source.editors.text

Source Code of org.rstudio.studio.client.workbench.views.source.editors.text.TextEditingTargetLatexFormatMenu

/*
* TextEditingTargetLatexFormatMenu.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.views.source.editors.text;

import org.rstudio.core.client.widget.ToolbarPopupMenu;
import org.rstudio.studio.client.workbench.prefs.model.UIPrefs;
import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Position;

import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.MenuItem;

public class TextEditingTargetLatexFormatMenu extends ToolbarPopupMenu
{
   public TextEditingTargetLatexFormatMenu(DocDisplay editor, UIPrefs prefs)
   {
      editor_ = editor;
      prefs_ = prefs;
     
      addItem(createLatexMenu("Section", "section*", true));
      addItem(createLatexMenu("Subsection", "subsection*", true));
      addItem(createLatexMenu("Sub-Subsection", "subsubsection*", true));
      addSeparator();
      addItem(createLatexMenu("Bold", "textbf"));
      addItem(createLatexMenu("Italic", "emph"));
      addItem(createLatexMenu("Typewriter", "texttt"));
      addItem(createLatexMenu("Quote", "``", "''"));
      addSeparator();
      addItem(createLatexListMenu("Bullet List", "itemize", false));
      addItem(createLatexListMenu("Numbered List","enumerate", false));
      addItem(createLatexListMenu("Description List", "description", true));
      addSeparator();
      addItem(createLatexMenu("Verbatim"
                            "\\begin{verbatim}\n",
                            "\n\\end{verbatim}"));
      addItem(createLatexMenu("Block Quote",
                            "\\begin{quote}\n",
                            "\n\\end{quote}"));
   }

   private MenuItem createLatexMenu(String text, String macro)
   {
      return createLatexMenu(text, macro, false);
   }
  
   private MenuItem createLatexMenu(String text,
                                    String macro,
                                    boolean isSectionMenu)
   {
      return createLatexMenu(text, "\\" + macro + "{", "}", isSectionMenu);   
   }
  
   private MenuItem createLatexMenu(String text, String prefix, String suffix)
   {
      return createLatexMenu(text, prefix, suffix, false);
   }
   
   private MenuItem createLatexMenu(String text,
                                    String prefix,
                                    String suffix,
                                    boolean isSectionMenu)
   {
      return new MenuItem(text, false, createLatexCommand(prefix,
                                                          suffix,
                                                          isSectionMenu));
   }
  
 
  
   private Command createLatexCommand(final String prefix,
                                      final String suffix,
                                      final boolean isSectionCommand)
   {
      return new Command() {

         @Override
         public void execute()
         {
            String selection = editor_.getSelectionValue();
           
            // modify prefix based on prefs
            String insertPrefix = prefix;
            if (isSectionCommand && 
                prefs_.insertNumberedLatexSections().getValue())
            {
               insertPrefix = insertPrefix.replace("*", "");
            }
           
            editor_.insertCode(insertPrefix + selection + suffix, false);
            editor_.focus();
           
            // if there was no previous selection then put the cursor
            // inside the braces
            if (selection.length() == 0)
            {
               Position pos = editor_.getCursorPosition();
               int row = pos.getRow();
               if (suffix.startsWith("\n"))
                  row = Math.max(0,  row - 1);
               int col = Math.max(0, pos.getColumn() - suffix.length());
          
               editor_.setCursorPosition(Position.create(row, col));
            }
         }};
   }
  
   private MenuItem createLatexListMenu(final String text,
                                        final String type,
                                        final boolean isDescription)
   {
      return new MenuItem(text, false, new Command(){
         @Override
         public void execute()
         {
            editor_.collapseSelection(true);
            Position pos = editor_.getCursorPosition();
           
            StringBuilder indent = new StringBuilder();
            if (prefs_.useSpacesForTab().getValue())
            {
               int spaces = prefs_.numSpacesForTab().getValue();
               for (int i=0; i<spaces; i++)
                  indent.append(' ');
            }
            else
            {
               indent.append('\t');
            }
          
            String item = indent.toString() + "\\item";
            String itemElement = item + (isDescription ? "[]" : " ");
           
            String code = "\\begin{" + type + "}\n";
            code += itemElement;
            code += "\n\\end{" + type + "}\n";
           
           
            editor_.insertCode(code, false);
            editor_.focus();
           
            editor_.setCursorPosition(Position.create(pos.getRow() + 1,
                                                      item.length() + 1));
         }
        
      });
   }
 
  
   private final DocDisplay editor_;
   private final UIPrefs prefs_;
}
TOP

Related Classes of org.rstudio.studio.client.workbench.views.source.editors.text.TextEditingTargetLatexFormatMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.