From 5daea459307d1d1fce60ac7382437c32c794f896 Mon Sep 17 00:00:00 2001
From: nightfox <>
Date: Fri, 20 Sep 2013 03:19:21 +0000
Subject: [PATCH] SlyEdit version 1.33: Added a configuration option to set a
 text prefix for taglines.  The default is "... ".  Also added configuration
 options to shuffle (randomize) the taglines that are displayed to the user
 (set to true in SlyEdit.cfg) and to add double-quotes around taglines
 (defaults to false).  If the sysop wants to add double-quotes around taglines
 and not add a prefix to taglines, the prefix can be set to blank (nothing
 after the =).

---
 ctrl/SlyEdit.cfg     |  9 +++++++++
 exec/SlyEdit.js      | 25 +++++++++++++++++++++--
 exec/SlyEdit_Misc.js | 48 +++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/ctrl/SlyEdit.cfg b/ctrl/SlyEdit.cfg
index 6e43aa6a52..93219c2ba6 100644
--- a/ctrl/SlyEdit.cfg
+++ b/ctrl/SlyEdit.cfg
@@ -25,6 +25,15 @@ enableTextReplacements=true
 
 ; The name of the file where tag lines are stored
 tagLineFilename=SlyEdit_Taglines.txt
+; Text to add to the front of a tagline when adding it to the message.
+; This can be blank (nothing after the =) if no prefix is desired.
+taglinePrefix=... 
+; Whether or not to add double-quotes around taglines
+quoteTaglines=false
+; Whether or not to shuffle (randomize) the list of taglines when they are
+; displayed for the user to choose from
+shuffleTaglines=true
+
 ; Whether or not to allow users to change their user settings.
 allowUserSettings=true
 
diff --git a/exec/SlyEdit.js b/exec/SlyEdit.js
index a2fa1bf092..e54f894d90 100644
--- a/exec/SlyEdit.js
+++ b/exec/SlyEdit.js
@@ -72,6 +72,11 @@
  *                              overwrite mode in DCT mode when using a wide
  *                              terminal; the text replacement list now only draws
  *                              the side borders once.
+ * 2013-09-18 Eric Oulashin     Version 1.32
+ *                              Releasing this version.
+ * 2013-09-19 Eric Oulashin     Version 1.33
+ *                              Added 3 options to the SlyEdit configuration file:
+ *                              taglinePrefix, quoteTaglines, and shuffleTaglines.
  */
 
 /* Command-line arguments:
@@ -149,8 +154,8 @@ if (!console.term_supports(USER_ANSI))
 }
 
 // Constants
-const EDITOR_VERSION = "1.32";
-const EDITOR_VER_DATE = "2013-09-18";
+const EDITOR_VERSION = "1.33";
+const EDITOR_VER_DATE = "2013-09-19";
 
 
 // Program variables
@@ -5580,6 +5585,11 @@ function doTaglineSelection()
    if (taglines.length == 0)
       return;
 
+   // If the configuration option to shuffle the taglines is enabled, then
+   // shuffle them.
+   if (gConfigSettings.shuffleTaglines)
+      shuffleArray(taglines);
+
    // Create the list box for the taglines.  Make the box up to 14 lines tall.
    var boxHeight = (taglines.length > 12 ? 14 : taglines.length+2);
    var boxTopRow = gEditTop + Math.floor((gEditHeight/2) - (boxHeight/2));
@@ -5608,6 +5618,17 @@ function doTaglineSelection()
       retObj.taglineWasSelected = true;
    }
 
+   // If a tagline was selected, then add the tagline prefix in front of it, and
+   // also quote the tagline if the option to do so is enabled.
+   if (retObj.taglineWasSelected)
+   {
+      if (gConfigSettings.taglinePrefix.length > 0)
+         retObj.tagline = gConfigSettings.taglinePrefix + retObj.tagline;
+      // If the option to quote taglines is enabled, then do it.
+      if (gConfigSettings.quoteTaglines)
+         retObj.tagline = "\"" + retObj.tagline + "\"";
+   }
+
    return retObj;
 }
 
diff --git a/exec/SlyEdit_Misc.js b/exec/SlyEdit_Misc.js
index 7f4688c934..30c172ac83 100644
--- a/exec/SlyEdit_Misc.js
+++ b/exec/SlyEdit_Misc.js
@@ -60,6 +60,10 @@
  *                              to display the hotkey Ctrl-U for user settings.
  *                              Moved the options for author initials in quote
  *                              lines to user settings.
+ * 2013-09-19 Eric Oulashin     Added the shuffleArray() function.  Added 3
+ *                              more options to the config file, to be read by
+ *                              ReadSlyEditConfigFile(): taglinePrefix, quoteTaglines,
+ *                              and shuffleTaglines.
  */
 
 // Note: These variables are declared with "var" instead of "const" to avoid
@@ -1532,7 +1536,10 @@ function ReadSlyEditConfigFile()
    cfgObj.enableTextReplacements = false;
    cfgObj.textReplacementsUseRegex = false;
    cfgObj.enableTaglines = false;
-   cfgObj.tagLineFilename = "SlyEdit_Taglines.txt";
+   cfgObj.tagLineFilename = genFullPathCfgFilename("SlyEdit_Taglines.txt", gStartupPath);
+   cfgObj.taglinePrefix = "... ";
+   cfgObj.quoteTaglines = false;
+   cfgObj.shuffleTaglines = false;
    cfgObj.allowUserSettings = true;
 
    // General SlyEdit color settings
@@ -1663,7 +1670,8 @@ function ReadSlyEditConfigFile()
       var commentPos = 0;      // Position of the start of a comment
       var setting = null;      // A setting name (string)
       var settingUpper = null; // Upper-case setting name
-      var value = null;        // A value for a setting (string)
+      var value = null;        // A value for a setting (string), with spaces trimmed
+      var valueLiteral = null; // The value as it is in the config file, no processing
       var valueUpper = null;   // Upper-cased value
       while (!cfgFile.eof)
       {
@@ -1713,7 +1721,8 @@ function ReadSlyEditConfigFile()
             // Read the setting & value, and trim leading & trailing spaces.
             setting = trimSpaces(fileLine.substr(0, equalsPos), true, false, true);
             settingUpper = setting.toUpperCase();
-            value = trimSpaces(fileLine.substr(equalsPos+1), true, false, true);
+            valueLiteral = fileLine.substr(equalsPos+1);
+            value = trimSpaces(valueLiteral, true, false, true);
             valueUpper = value.toUpperCase();
 
             if (settingsMode == "behavior")
@@ -1759,6 +1768,12 @@ function ReadSlyEditConfigFile()
                   cfgObj.enableTaglines = (valueUpper == "TRUE");
                else if (settingUpper == "TAGLINEFILENAME")
                   cfgObj.tagLineFilename = genFullPathCfgFilename(value, gStartupPath);
+               else if (settingUpper == "TAGLINEPREFIX")
+                  cfgObj.taglinePrefix = valueLiteral;
+               else if (settingUpper == "QUOTETAGLINES")
+                  cfgObj.quoteTaglines = (valueUpper == "TRUE");
+               else if (settingUpper == "SHUFFLETAGLINES")
+                  cfgObj.shuffleTaglines = (valueUpper == "TRUE");
                else if (settingUpper == "ALLOWUSERSETTINGS")
                   cfgObj.allowUserSettings = (valueUpper == "TRUE");
             }
@@ -3803,6 +3818,33 @@ function chgCharInStr(pStr, pCharIndex, pNewText)
    return (pStr.substr(0, pCharIndex) + pNewText + pStr.substr(pCharIndex+1));
 }
 
+// Shuffles (randomizes) the contents of an array and returns the new
+// array.  This function came from the following web page:
+// http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript
+//
+// Parameters:
+//  pArray: The array to shuffle
+//
+// Return value: The new array
+function shuffleArray(pArray)
+{
+    var counter = pArray.length, temp, index;
+
+    // While there are elements in the pArray
+    while (counter--)
+    {
+        // Pick a random index
+        index = (Math.random() * (counter + 1)) | 0;
+
+        // And swap the last element with it
+        temp = pArray[counter];
+        pArray[counter] = pArray[index];
+        pArray[index] = temp;
+    }
+
+    return pArray;
+}
+
 // This function displays debug text at a given location on the screen, then
 // moves the cursor back to a given location.
 //
-- 
GitLab