@Nullable
 private String expandMacroSet(
     String str, boolean firstQueueExpand, DataContext dataContext, Iterator<Macro> macros)
     throws Macro.ExecutionCancelledException {
   if (str == null) return null;
   while (macros.hasNext()) {
     Macro macro = macros.next();
     if (macro instanceof SecondQueueExpandMacro && firstQueueExpand) continue;
     String name = "$" + macro.getName() + "$";
     String macroNameWithParamStart = "$" + macro.getName() + "(";
     if (str.contains(name)) {
       String expanded = macro.expand(dataContext);
       // if (dataContext instanceof DataManagerImpl.MyDataContext) {
       //  // hack: macro.expand() can cause UI events such as showing dialogs ('Prompt' macro)
       // which may 'invalidate' the datacontext
       //  // since we know exactly that context is valid, we need to update its event count
       //
       // ((DataManagerImpl.MyDataContext)dataContext).setEventCount(IdeEventQueue.getInstance().getEventCount());
       // }
       if (expanded == null) {
         expanded = "";
       }
       str = StringUtil.replace(str, name, expanded);
     } else if (str.contains(macroNameWithParamStart)) {
       String macroNameWithParamEnd = ")$";
       Map<String, String> toReplace = null;
       int i = str.indexOf(macroNameWithParamStart);
       while (i != -1) {
         int j = str.indexOf(macroNameWithParamEnd, i + macroNameWithParamStart.length());
         if (j > i) {
           String param = str.substring(i + macroNameWithParamStart.length(), j);
           if (toReplace == null) toReplace = new THashMap<String, String>();
           String expanded = macro.expand(dataContext, param);
           if (expanded == null) {
             expanded = "";
           }
           toReplace.put(macroNameWithParamStart + param + macroNameWithParamEnd, expanded);
           i = j + macroNameWithParamEnd.length();
         } else {
           break;
         }
       }
       if (toReplace != null) {
         for (Map.Entry<String, String> entry : toReplace.entrySet()) {
           str = StringUtil.replace(str, entry.getKey(), entry.getValue());
         }
       }
     }
   }
   return str;
 }
  private void save() {
    try {
      File macroFolder = new File(MACRO_FOLDER);
      if (!macroFolder.exists()) {
        macroFolder.mkdir();
      }

      for (Macro macro : macros.values()) {
        if (!macro.isTransient()) {
          // write JSON to config file
          File file = new File(MACRO_FOLDER + "/" + macro.getName() + ".json");
          FileWriter fileWriter = new FileWriter(file);
          try {
            fileWriter.write(macro.toJSON().toJSONString());
          } finally {
            // close file
            fileWriter.close();
          }
        }
      }
    } catch (IOException e) {
      // deal with exception
      e.printStackTrace();
    }
  }
Beispiel #3
0
 public void addMacro(Macro macro) {
   try {
     cpp.addMacro(macro.getName(), FeatureExprLib.True(), macro.getValue());
   } catch (LexerException e) {
     throw new BuildException(e);
   }
 }
 public void load(Reader reader) {
   try {
     JSONParser jsonParser = new JSONParser();
     JSONObject jsonMacro = (JSONObject) jsonParser.parse(reader);
     Macro macro = Macro.fromJSON(jsonMacro);
     macros.put(macro.getName(), macro);
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
Beispiel #5
0
 public Macro get(String name) {
   Map m = db.getMap(NAME);
   Macro c;
   for (Iterator i = m.values().iterator(); i.hasNext(); ) {
     c = (Macro) i.next();
     if (c.getName().equals(name)) {
       return c;
     }
   }
   return null;
 }
  /**
   * @see
   *     org.alfresco.contentcraft.command.BaseCommandExecuter#onCommandImpl(org.bukkit.command.CommandSender,
   *     org.bukkit.command.Command, java.lang.String, java.lang.String[])
   */
  @Override
  public void onCommandImpl(CommandSender sender, Command command, String label, String[] args)
      throws CommandUsageException {
    String operation = args[0];
    if (operation.equalsIgnoreCase(CMD_LIST)) {
      StringBuilder builder = new StringBuilder("Available macros:\n");
      for (String name : macros.keySet()) {
        builder.append("  - " + name + "\n");
      }
      sender.sendMessage(builder.toString());

      // temp
      save();
    } else if (operation.equalsIgnoreCase(CMD_STOP)) {
      // stop recording the currently recording macro
      if (recordingMacro != null) {
        recordingMacro.stop();
        recordingMacro = null;
        save();
      } else {
        for (Macro macro : macros.values()) {
          macro.stop();
        }
      }
    } else {
      String name = args[1];
      Macro macro = macros.get(name);

      if (operation.equalsIgnoreCase(CMD_START)) {
        if (recordingMacro == null) {
          if (macro == null) {
            macro = Macro.startNew(name);
            macros.put(name, macro);
          } else {
            macro.clear();
            macro.start();
          }

          // store the currently recording macro
          recordingMacro = macro;
        } else {
          // a macro is already recording
          sender.sendMessage(
              "Can't start macro, because "
                  + recordingMacro.getName()
                  + " is currently being recorded.");
        }
      } else if (operation.equalsIgnoreCase(CMD_RUN)) {
        if (macro != null) {
          boolean runRepeat = false;

          if (args.length == 3 && "-R".equals(args[2])) {
            runRepeat = true;
          }

          macro.runPending(runRepeat);
        }
      } else if (operation.equalsIgnoreCase(CMD_DELETE)) {
        if (macro != null) {
          macros.remove(name);
          save();
        }
      }
    }
  }
Beispiel #7
0
 public String toString() {
   return myMacro.getName() + " - " + myMacro.getDescription();
 }
  private void registerMacro(Macro macro) {
    assert PathMacrosImpl.getToolMacroNames().contains(macro.getName())
        : "Macro '" + macro.getName() + "' should be registered in PathMacros!";

    myMacrosMap.put(macro.getName(), macro);
  }