String Handling

His Dad [09-01-18 - 04:27]
String Handling
Filename
HistOfflineBeta.lua
data/Strings.lua
diff --git a/HistOfflineBeta.lua b/HistOfflineBeta.lua
index 74a6670..501824b 100644
--- a/HistOfflineBeta.lua
+++ b/HistOfflineBeta.lua
@@ -49,6 +49,7 @@ dofile "./data/WB.lua"
 dofile "./data/Trials.lua"
 dofile "./data/Special.lua"		-- Record of non standard Achievement ID's we need to keep.
 dofile "./data/utility.lua"		-- utility functions
+dofile "./data/Strings.lua"		-- String Handling

 --generate_id ()			-- Generate the file the addon uses to filter Achievement ID's
 -- This is used by the in game part history.lua to only record achievements that are used.
diff --git a/data/Strings.lua b/data/Strings.lua
new file mode 100644
index 0000000..7f4fed8
--- /dev/null
+++ b/data/Strings.lua
@@ -0,0 +1,112 @@
+--Functions relating to Strings
+
+
+-- take a string and break by spaces to an array
+split_w = function (astring)   -- String sentence
+    if (astring == nil) then
+		print("split_w nil")
+		return {}
+	end
+
+	local words = {}
+	for w in string.gmatch(astring, "%S+") do
+		table.insert(words,w)
+	end
+	return words	--array of the words
+end
+split_s = function(astring)
+	local sentences = {}
+	local sofar = ""
+	local words = split_w(astring)
+	if #words < 2 then return(words) end
+
+	for  i,s in ipairs(words) do
+		if (sofar == "") then		--no leading blank
+			sofar = tostring(s)
+		else
+			sofar = sofar .." " ..  tostring(s)
+		end
+
+
+		if (i == #words) then
+			--	 	add last word unconditionally and return
+			table.insert(sentences,sofar)
+			return sentences
+		end
+
+		if string.find(s,"%.") then
+			table.insert(sentences,sofar)
+			sofar = ""
+		end
+	end
+	print("Should never get here")
+end
+test = "In Veteran White-Gold Tower, become completely engulfed in flame by the Planar Inhibitor's Heat Stroke attack before it completes its Daedric Catastrophe attack. Then stay alive until the Planar Inhibitor is defeated."
+--split = split_w(test)
+--print("returned a table of " .. #split .. "  words.")
+
+
+flow_s = function( words_t, max_length )
+--[[ given an array of words  { [1]="TENTENTEN0", [2] = "FOUR", [3]="THREE"}
+	return an array of array of words so that the length is not greater than max_length
+with max_length 10
+  {  [1] = {[1]="TENTENTEN0"},  --array of 1 value
+      [2] = {[1]="FOUR", [2]="THREE"}  --array of 2 value
+	}
+--]]
+    if words_t == nil then
+		print("words_t is nil")
+		return nil
+	end
+
+	if type(max_length) ~= "number" then
+		print("max_length is not a number")
+		return nil
+	end
+
+
+
+	result = {}
+	line_t = {}
+	line_len = 0
+	for i, word in ipairs (words_t) do
+	--	print (word)
+		if (string.len(word) + line_len) > max_length then
+			table.insert(result,line_t)
+			line_t = {}
+			line_len = 0
+		end
+		table.insert(line_t, word)
+		if line_len >  0 then
+			line_len = line_len + string.len(word) +1		--Allow for Spaces
+		else
+			line_len = line_len + string.len(word)
+		end
+	end
+	table.insert(result,line_t)
+	return result
+end
+
+
+	join_s = function (words_tt)
+--given an array of array of words (output from flow_s) Produce a string with \n
+    if words_t == nil then
+		print("parameter nil in join_s")
+		return nil
+	end
+
+	local result = ""
+	for _,words_t in ipairs (words_tt) do
+
+		for _,word in ipairs (words_t) do
+
+
+		end
+
+	end
+
+
+end
+
+print(join_w(split_w(test)))
+