[710] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Diagnostics;
|
---|
[874] | 4 | using System.IO;
|
---|
[710] | 5 | using System.Text;
|
---|
| 6 | using System.Xml;
|
---|
[874] | 7 | using IronJS;
|
---|
[710] | 8 |
|
---|
| 9 | namespace xmlTools
|
---|
| 10 | {
|
---|
| 11 | /// <summary>
|
---|
| 12 | /// This classes parses a .patch xml tools file and applies its content to the files which it specifies
|
---|
| 13 | /// </summary>
|
---|
| 14 | class XmlPatch
|
---|
| 15 | {
|
---|
| 16 | String fileName;
|
---|
| 17 | String forceFiles = "";
|
---|
[742] | 18 | bool globalNoBackups = false;
|
---|
[874] | 19 | IronJS.Hosting.CSharp.Context jsEngine = null; // initialize only when necessary
|
---|
[710] | 20 |
|
---|
[742] | 21 | public XmlPatch(String file, bool noBackups)
|
---|
[710] | 22 | {
|
---|
| 23 | fileName = file;
|
---|
[742] | 24 | globalNoBackups = noBackups;
|
---|
[710] | 25 | }
|
---|
| 26 |
|
---|
[742] | 27 | public XmlPatch(String file, String forceInFiles, bool noBackups)
|
---|
[710] | 28 | {
|
---|
| 29 | fileName = file;
|
---|
| 30 | forceFiles = forceInFiles; //We support apply the operation in diverse forced files (NameOfFile parameter will be ignored)
|
---|
[742] | 31 | globalNoBackups = noBackups;
|
---|
[710] | 32 | }
|
---|
| 33 |
|
---|
| 34 | /// <summary>
|
---|
| 35 | /// Applies the patch file. Returns true if successful otherwise returns false.
|
---|
| 36 | /// </summary>
|
---|
| 37 | /// <returns></returns>
|
---|
| 38 | public bool startPatch()
|
---|
| 39 | {
|
---|
| 40 | string line;
|
---|
| 41 |
|
---|
| 42 | // Read the file and display it line by line.
|
---|
| 43 | System.IO.StreamReader file = new System.IO.StreamReader(fileName);
|
---|
| 44 |
|
---|
| 45 | while ((line = file.ReadLine()) != null) //read while we don't reach the end of the file
|
---|
| 46 | {
|
---|
| 47 | if (line.StartsWith("@ADDTO "))
|
---|
| 48 | {
|
---|
| 49 | string operation = line;
|
---|
| 50 | string xmlToInject = "";
|
---|
| 51 |
|
---|
| 52 | file.ReadLine(); //ignore <xml> start header
|
---|
| 53 | while ((line = file.ReadLine()) != "</xml>")
|
---|
| 54 | {
|
---|
[874] | 55 | xmlToInject += line + System.Environment.NewLine; //get all the xml that will be injected
|
---|
[710] | 56 | }
|
---|
| 57 | if (!addOperation(operation, xmlToInject))
|
---|
| 58 | {
|
---|
| 59 | Program.printAppError(Program.appErrors.PATCH_ADDTO_PROCESS_ERROR, "Error while performing adding operation in patch file. Aborting...");
|
---|
| 60 | return false;
|
---|
| 61 | }
|
---|
| 62 | }
|
---|
| 63 | else if (line.StartsWith("@REMOVE "))
|
---|
| 64 | {
|
---|
| 65 | if (!removeOperation(line))
|
---|
| 66 | {
|
---|
| 67 | Program.printAppError(Program.appErrors.PATCH_REMOVE_PROCESS_ERROR, "Error while performing remove operation in patch file. Aborting...");
|
---|
| 68 | return false;
|
---|
| 69 | }
|
---|
| 70 | }
|
---|
| 71 | else if (line.StartsWith("@COMMAND "))
|
---|
| 72 | {
|
---|
| 73 | if (!executeCommand(line))
|
---|
| 74 | {
|
---|
| 75 | Program.printAppError(Program.appErrors.PATCH_COMMAND_PROCESS_ERROR, "Error while performing command operation in patch file. Aborting...");
|
---|
| 76 | return false;
|
---|
| 77 | }
|
---|
| 78 | }
|
---|
[874] | 79 | else if (line.StartsWith("@CUSTOMCODE "))
|
---|
| 80 | {
|
---|
| 81 | string operation = line;
|
---|
| 82 | string jsCode = "";
|
---|
| 83 |
|
---|
| 84 | file.ReadLine(); //ignore <xml> start header
|
---|
| 85 | while ((line = file.ReadLine()) != "</code>")
|
---|
| 86 | {
|
---|
| 87 | jsCode += line + System.Environment.NewLine; //get all the xml that will be injected
|
---|
| 88 | }
|
---|
| 89 | if (!executeCode(operation, jsCode))
|
---|
| 90 | {
|
---|
| 91 | Program.printAppError(Program.appErrors.PATCH_CODE_PROCESS_ERROR, "Error while performing code operation in patch file. Aborting...");
|
---|
| 92 | return false;
|
---|
| 93 | }
|
---|
| 94 | }
|
---|
[710] | 95 | }
|
---|
| 96 |
|
---|
| 97 | file.Close();
|
---|
| 98 |
|
---|
| 99 | return true;
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 | /// <summary>
|
---|
| 103 | /// Inserts xml in a desired Element. Returns true or false if it succeeds
|
---|
| 104 | /// </summary>
|
---|
| 105 | /// <param name="operation"></param>
|
---|
| 106 | /// <param name="xmlToInject"></param>
|
---|
| 107 | /// <returns></returns>
|
---|
| 108 | private bool addOperation(string operation, string xmlToInject)
|
---|
| 109 | {
|
---|
| 110 | //@ADDTO File "example.xml" ParentElement "Animation" Element "Lookup"
|
---|
| 111 |
|
---|
[874] | 112 | string FileParam = "", ParentElementParam = "", ElementParam = "";
|
---|
[710] | 113 |
|
---|
| 114 | //---------------------------------------------------Parse Operation command (start)
|
---|
| 115 | try
|
---|
| 116 | {
|
---|
[867] | 117 | if (String.IsNullOrEmpty(forceFiles))
|
---|
[710] | 118 | {
|
---|
[874] | 119 | FileParam = getPatchParameter(operation, "File");
|
---|
[710] | 120 | }
|
---|
| 121 | else
|
---|
| 122 | {
|
---|
[874] | 123 | FileParam = forceFiles;
|
---|
[710] | 124 | }
|
---|
| 125 |
|
---|
[874] | 126 | ParentElementParam = getPatchParameter(operation, "ParentElement"); //Get the ParentElement
|
---|
[710] | 127 |
|
---|
[874] | 128 | ElementParam = getPatchParameter(operation, "Element"); //Get the Element
|
---|
[710] | 129 | }
|
---|
| 130 | catch (Exception e)
|
---|
| 131 | {
|
---|
| 132 | Program.printAppError(Program.appErrors.PATCH_ADDTO_ERROR_PARSING_XML, "Error parsing addOperation in Patch file.\n" + e.ToString());
|
---|
| 133 | return false;
|
---|
| 134 | }
|
---|
| 135 |
|
---|
[874] | 136 | if (String.IsNullOrEmpty(ElementParam))
|
---|
[710] | 137 | {
|
---|
| 138 | return false;
|
---|
| 139 | }
|
---|
| 140 |
|
---|
| 141 | //---------------------------------------------------Parse Operation command (end)
|
---|
| 142 | List<String> filesToProcess = new List<String>();
|
---|
[874] | 143 | if (String.IsNullOrEmpty(FileParam))
|
---|
[710] | 144 | {
|
---|
| 145 | filesToProcess = Util.getAllXmlFiles(); //no file specified, use all xml files found in same folder
|
---|
| 146 | }
|
---|
[874] | 147 | else if (Util.containsWildcard(FileParam))
|
---|
[710] | 148 | {
|
---|
[874] | 149 | filesToProcess = Util.getXmlFilesWildcard(FileParam);
|
---|
[710] | 150 | }
|
---|
| 151 | else
|
---|
| 152 | {
|
---|
[874] | 153 | filesToProcess.Add(FileParam);
|
---|
[710] | 154 | }
|
---|
| 155 |
|
---|
| 156 | //---------------------------------------------------XML Injection (start)
|
---|
| 157 | foreach (String currFile in filesToProcess)
|
---|
| 158 | {
|
---|
[742] | 159 | if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
|
---|
| 160 | {
|
---|
| 161 | Util.backupFile(currFile);
|
---|
| 162 | }
|
---|
[710] | 163 |
|
---|
| 164 | XmlDocument xdoc = new XmlDocument();
|
---|
| 165 | xdoc.Load(currFile);
|
---|
| 166 |
|
---|
| 167 | List<XmlNode> myElements = new List<XmlNode>();
|
---|
[874] | 168 | Util.getAllSpecificElements(xdoc.DocumentElement, ref myElements, ElementParam, ParentElementParam); //Returns all after "Oni" element
|
---|
[710] | 169 |
|
---|
| 170 | if (myElements.Count == 0)
|
---|
| 171 | {
|
---|
| 172 | Program.printAppError(Program.appErrors.PATCH_ELEMENT_NOT_FOUND, "Error in addOperation in Patch file: the element specified doesn't exist.");
|
---|
| 173 | return false;
|
---|
| 174 | }
|
---|
| 175 |
|
---|
| 176 | try
|
---|
| 177 | {
|
---|
| 178 | XmlNode newXml = xdoc.ImportNode(Util.stringToXmlNode(xmlToInject), true); //necessary to import node or ArgumentException will be thrown when appending
|
---|
| 179 |
|
---|
| 180 | myElements[myElements.Count - 1].AppendChild(newXml); // Append the code after last element
|
---|
| 181 |
|
---|
| 182 | xdoc.Save(currFile);
|
---|
| 183 | }
|
---|
| 184 | catch (XmlException e)
|
---|
| 185 | {
|
---|
| 186 | Program.printAppError(Program.appErrors.PATCH_ADDTO_ERROR_PARSING_XML, "Error parsing xml to addOperation in Patch file.\n" + e.ToString());
|
---|
| 187 | return false;
|
---|
| 188 | }
|
---|
| 189 | }
|
---|
| 190 | //---------------------------------------------------XML Injection (end)
|
---|
| 191 |
|
---|
| 192 | return true;
|
---|
| 193 | }
|
---|
| 194 |
|
---|
| 195 | /// <summary>
|
---|
| 196 | /// Removes a xml element, right now it removes the first element it finds with matchs "Element" and "ParentElement" parameters
|
---|
| 197 | /// </summary>
|
---|
| 198 | /// <param name="operation"></param>
|
---|
| 199 | /// <returns>true or false depending if succeed or not</returns>
|
---|
| 200 | private bool removeOperation(string operation)
|
---|
| 201 | {
|
---|
| 202 | //@REMOVE File "example.xml" ParentElement "Particles" Element "Particle"
|
---|
| 203 |
|
---|
[874] | 204 | string FileParam = "", ParentElementParam = "", ElementParam = "";
|
---|
[710] | 205 |
|
---|
| 206 | //---------------------------------------------------Parse Operation command (start)
|
---|
| 207 | try
|
---|
| 208 | {
|
---|
[867] | 209 | if (String.IsNullOrEmpty(forceFiles))
|
---|
[710] | 210 | {
|
---|
[874] | 211 | FileParam = getPatchParameter(operation, "File");
|
---|
[710] | 212 | }
|
---|
| 213 | else
|
---|
| 214 | {
|
---|
[874] | 215 | FileParam = forceFiles;
|
---|
[710] | 216 | }
|
---|
| 217 |
|
---|
[874] | 218 | ParentElementParam = getPatchParameter(operation, "ParentElement"); //Get the ParentElement
|
---|
[710] | 219 |
|
---|
[874] | 220 | ElementParam = getPatchParameter(operation, "Element"); //Get the Element
|
---|
[710] | 221 | }
|
---|
| 222 | catch (Exception e)
|
---|
| 223 | {
|
---|
| 224 | Program.printAppError(Program.appErrors.PATCH_REMOVE_PROCESS_ERROR, "Error parsing removeOperation in Patch file.\n" + e.ToString());
|
---|
| 225 | return false;
|
---|
| 226 | }
|
---|
| 227 |
|
---|
[874] | 228 | if (String.IsNullOrEmpty(ElementParam))
|
---|
[710] | 229 | {
|
---|
| 230 | return false;
|
---|
| 231 | }
|
---|
| 232 |
|
---|
| 233 | //---------------------------------------------------Parse Operation command (end)
|
---|
| 234 |
|
---|
| 235 | List<String> filesToProcess = new List<String>();
|
---|
[874] | 236 | if (String.IsNullOrEmpty(FileParam))
|
---|
[710] | 237 | {
|
---|
| 238 | filesToProcess = Util.getAllXmlFiles(); //no file specified, use all xml files found in same folder
|
---|
| 239 | }
|
---|
[874] | 240 | else if (Util.containsWildcard(FileParam))
|
---|
[710] | 241 | {
|
---|
[874] | 242 | filesToProcess = Util.getXmlFilesWildcard(FileParam);
|
---|
[710] | 243 | }
|
---|
| 244 | else
|
---|
| 245 | {
|
---|
[874] | 246 | filesToProcess.Add(FileParam);
|
---|
[710] | 247 | }
|
---|
| 248 |
|
---|
| 249 | //---------------------------------------------------XML Remove (start)
|
---|
| 250 |
|
---|
| 251 | foreach (String currFile in filesToProcess)
|
---|
| 252 | {
|
---|
| 253 |
|
---|
[742] | 254 | if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
|
---|
| 255 | {
|
---|
| 256 | Util.backupFile(currFile);
|
---|
| 257 | }
|
---|
[710] | 258 |
|
---|
| 259 | XmlDocument xdoc = new XmlDocument();
|
---|
| 260 | xdoc.Load(currFile);
|
---|
| 261 |
|
---|
| 262 | List<XmlNode> myElements = new List<XmlNode>();
|
---|
[874] | 263 | Util.getAllSpecificElements(xdoc.DocumentElement, ref myElements, ElementParam, ParentElementParam); //Returns all after "Oni" element
|
---|
[710] | 264 |
|
---|
| 265 | if (myElements.Count == 0)
|
---|
| 266 | {
|
---|
| 267 | Program.printAppError(Program.appErrors.PATCH_ELEMENT_NOT_FOUND, "Error in removeOperation in Patch file: the element specified doesn't exist.");
|
---|
| 268 | return false;
|
---|
| 269 | }
|
---|
| 270 |
|
---|
| 271 | myElements[0].ParentNode.RemoveChild(myElements[0]); // Removes the first occurrence which matches the "Element" and "ParentElement" given
|
---|
| 272 |
|
---|
| 273 | xdoc.Save(currFile);
|
---|
| 274 |
|
---|
| 275 | }
|
---|
| 276 | //---------------------------------------------------XML Remove (end)
|
---|
| 277 |
|
---|
| 278 |
|
---|
| 279 | return true;
|
---|
| 280 | }
|
---|
| 281 |
|
---|
| 282 | /// <summary>
|
---|
[874] | 283 | /// Executes a command for xmlTools
|
---|
[710] | 284 | /// </summary>
|
---|
| 285 | /// <param name="command"></param>
|
---|
| 286 | /// <returns>true or false depending if succeed or not</returns>
|
---|
| 287 | private bool executeCommand(string command)
|
---|
| 288 | {
|
---|
| 289 | //---------------------------------------------------Parse Operation command (start)
|
---|
| 290 |
|
---|
| 291 | command = command.Replace("@COMMAND ", ""); //get only the command to process
|
---|
| 292 |
|
---|
[867] | 293 | if (String.IsNullOrEmpty(command.Trim()))
|
---|
[710] | 294 | {
|
---|
| 295 | Program.printAppError(Program.appErrors.PATCH_COMMAND_NOT_FOUND, "Error parsing commandOperation in Patch file: Command is empty.");
|
---|
| 296 | return false;
|
---|
| 297 | }
|
---|
| 298 |
|
---|
| 299 | try
|
---|
| 300 | {
|
---|
[868] | 301 | if (!String.IsNullOrEmpty(forceFiles))
|
---|
[710] | 302 | {
|
---|
| 303 | string paramType = "";
|
---|
| 304 |
|
---|
| 305 | // Filename already exists?
|
---|
[874] | 306 | if (Util.ContainsIgnoreCase(command, "filename:"))
|
---|
[710] | 307 | {
|
---|
| 308 | paramType = "filename:";
|
---|
| 309 | }
|
---|
[745] | 310 | else if (Util.ContainsIgnoreCase(command, "filename="))
|
---|
[710] | 311 | {
|
---|
| 312 | paramType = "filename=";
|
---|
| 313 | }
|
---|
| 314 | // Add the filename if it doesn't exists
|
---|
| 315 | else
|
---|
| 316 | {
|
---|
[874] | 317 | command = command.Insert(command.Length, " -filename:" + this.forceFiles);
|
---|
[710] | 318 | }
|
---|
| 319 |
|
---|
[867] | 320 | if (!String.IsNullOrEmpty(paramType))
|
---|
[710] | 321 | {
|
---|
| 322 | int startIdx = command.IndexOf(paramType) + paramType.Length;
|
---|
| 323 | int endIdx = command.IndexOf(" ", startIdx); // it may end with space
|
---|
| 324 | if (endIdx == -1)
|
---|
| 325 | {
|
---|
[745] | 326 | endIdx = command.IndexOf("\n", startIdx); // or with endline
|
---|
[874] | 327 | if (endIdx == -1)
|
---|
| 328 | { // Filename parameters is the last one in the file (file ends with this parameter)
|
---|
| 329 | endIdx = command.Length - 1;
|
---|
[868] | 330 | }
|
---|
[710] | 331 | }
|
---|
| 332 | string currFilename = command.Substring(startIdx, endIdx - startIdx);
|
---|
| 333 | command = command.Replace(currFilename, this.forceFiles);
|
---|
| 334 | }
|
---|
| 335 |
|
---|
| 336 | }
|
---|
| 337 |
|
---|
[874] | 338 | if (this.globalNoBackups && !Util.ContainsIgnoreCase(command, "nobackups")) // add noBackup flag if provided as global parameter
|
---|
[710] | 339 | {
|
---|
[746] | 340 | command = command.Insert(command.Length, " -nobackups");
|
---|
[710] | 341 | }
|
---|
| 342 |
|
---|
[745] | 343 | Program.Main(Util.stringToArgsArray(command)); // use the current process is more efficient than start a new one
|
---|
[710] | 344 | }
|
---|
| 345 | catch (Exception e)
|
---|
| 346 | {
|
---|
| 347 | Program.printAppError(Program.appErrors.PATCH_COMMAND_PROCESS_ERROR, "Error processing command in Patch file.\n" + e.ToString());
|
---|
| 348 | return false;
|
---|
| 349 | }
|
---|
| 350 |
|
---|
| 351 | return true;
|
---|
| 352 | }
|
---|
| 353 |
|
---|
[874] | 354 | /// <summary>
|
---|
| 355 | /// Executes custom Javascript code over the xml file specified. Uses .NET JINT library.
|
---|
| 356 | /// </summary>
|
---|
| 357 | /// <param name="command"></param>
|
---|
| 358 | /// <returns></returns>
|
---|
| 359 | private bool executeCode(string operation, string jsCode)
|
---|
| 360 | {
|
---|
| 361 | string FileParam = "";
|
---|
| 362 |
|
---|
| 363 | //---------------------------------------------------Parse Operation command (start)
|
---|
| 364 | try
|
---|
| 365 | {
|
---|
| 366 | if (String.IsNullOrEmpty(forceFiles))
|
---|
| 367 | {
|
---|
| 368 | FileParam = getPatchParameter(operation, "File");
|
---|
| 369 | }
|
---|
| 370 | else
|
---|
| 371 | {
|
---|
| 372 | FileParam = forceFiles;
|
---|
| 373 | }
|
---|
| 374 |
|
---|
| 375 | }
|
---|
| 376 | catch (Exception e)
|
---|
| 377 | {
|
---|
| 378 | Program.printAppError(Program.appErrors.PATCH_CODE_PROCESS_ERROR, "Error parsing codeOperation in Patch file.\n" + e.ToString());
|
---|
| 379 | return false;
|
---|
| 380 | }
|
---|
| 381 |
|
---|
| 382 | //---------------------------------------------------Parse Operation command (end)
|
---|
| 383 | List<String> filesToProcess = new List<String>();
|
---|
| 384 | if (String.IsNullOrEmpty(FileParam))
|
---|
| 385 | {
|
---|
| 386 | filesToProcess = Util.getAllXmlFiles(); //no file specified, use all xml files found in same folder
|
---|
| 387 | }
|
---|
| 388 | else if (Util.containsWildcard(FileParam))
|
---|
| 389 | {
|
---|
| 390 | filesToProcess = Util.getXmlFilesWildcard(FileParam);
|
---|
| 391 | }
|
---|
| 392 | else
|
---|
| 393 | {
|
---|
| 394 | filesToProcess.Add(FileParam);
|
---|
| 395 | }
|
---|
| 396 |
|
---|
| 397 | //---------------------------------------------------JS Code Proccess (start)
|
---|
| 398 | foreach (String currXMLFile in filesToProcess)
|
---|
| 399 | {
|
---|
| 400 | if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
|
---|
| 401 | {
|
---|
| 402 | Util.backupFile(currXMLFile);
|
---|
| 403 | }
|
---|
| 404 |
|
---|
| 405 | string xmlFileContent = File.ReadAllText(currXMLFile);
|
---|
| 406 |
|
---|
| 407 | // Initialize Jint Engine
|
---|
| 408 | if (jsEngine == null)
|
---|
| 409 | {
|
---|
| 410 | jsEngine = new IronJS.Hosting.CSharp.Context();
|
---|
| 411 |
|
---|
| 412 | // Load XML libraries
|
---|
| 413 | jsEngine.Execute(xmlTools.Properties.Resources.tinyxmlsax);
|
---|
| 414 | jsEngine.Execute(xmlTools.Properties.Resources.tinyxmlw3cdom);
|
---|
| 415 | }
|
---|
| 416 |
|
---|
| 417 | // Construct code to execute
|
---|
| 418 | StringBuilder sourceCode = new StringBuilder();
|
---|
| 419 |
|
---|
| 420 | // give user the xml we needs to edit...
|
---|
| 421 | sourceCode.Append("var $xmlData='").Append(xmlFileContent.Replace(System.Environment.NewLine, " \\" + System.Environment.NewLine)).Append("';").AppendLine(); // replace is for multine string in javascript (http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)
|
---|
| 422 | // append the user js code...
|
---|
| 423 | sourceCode.Append(jsCode).AppendLine();
|
---|
| 424 | // return to .NET the new xml data
|
---|
| 425 | sourceCode.Append("$xmlData;");
|
---|
| 426 |
|
---|
| 427 | try
|
---|
| 428 | {
|
---|
| 429 | xmlFileContent = jsEngine.Execute(sourceCode.ToString()).ToString();
|
---|
| 430 | }
|
---|
| 431 | catch (Exception e)
|
---|
| 432 | {
|
---|
| 433 | Program.printAppError(Program.appErrors.PATCH_CODE_PROCESS_ERROR, "Error parsing code in customCodeOperation in Patch file.\n" + e.ToString());
|
---|
| 434 | return false;
|
---|
| 435 | }
|
---|
| 436 |
|
---|
| 437 | // Let's see if the returned result is valid xml...
|
---|
| 438 | try
|
---|
| 439 | {
|
---|
| 440 | XmlDocument xmlDoc = new XmlDocument();
|
---|
| 441 |
|
---|
| 442 | xmlDoc.LoadXml(xmlFileContent);
|
---|
| 443 |
|
---|
| 444 | xmlDoc.Save(currXMLFile); //saving the new xml with this method will auto ident it.
|
---|
| 445 |
|
---|
| 446 | }
|
---|
| 447 | catch (Exception e)
|
---|
| 448 | {
|
---|
| 449 | Program.printAppError(Program.appErrors.PATCH_CODE_PARSE_XML_OUTPUT_ERROR, "Error parsing result xml to customCodeOperation in Patch file.\n" + e.ToString());
|
---|
| 450 | return false;
|
---|
| 451 | }
|
---|
| 452 | }
|
---|
| 453 | //---------------------------------------------------JS Code Proccess (end)
|
---|
| 454 |
|
---|
| 455 | return true;
|
---|
| 456 | }
|
---|
| 457 |
|
---|
[710] | 458 | private string getPatchParameter(string line, string parameterName)
|
---|
| 459 | {
|
---|
| 460 | string result = "";
|
---|
| 461 | int startIdx = 0, endIdx = 0;
|
---|
| 462 |
|
---|
| 463 | string temp = parameterName + " \"";
|
---|
| 464 |
|
---|
| 465 | startIdx = line.IndexOf(temp);
|
---|
| 466 | if (startIdx != -1) //we have Parameter specified
|
---|
| 467 | {
|
---|
| 468 | startIdx += temp.Length;
|
---|
| 469 | endIdx = line.IndexOf("\"", startIdx);
|
---|
| 470 | result = line.Substring(startIdx, endIdx - startIdx); //Get the parameter value
|
---|
| 471 | }
|
---|
| 472 |
|
---|
| 473 | return result;
|
---|
| 474 | }
|
---|
| 475 | }
|
---|
| 476 | }
|
---|