Version 0.7.0-beta
- order buttons - use numeric LogLevel over booleans - exact case option reversed (again) - smart case handling if replacement is longer than match - Deletion of all mappings
This commit is contained in:
parent
a29f6486fe
commit
cb2c995a82
22
CHANGELOG.md
22
CHANGELOG.md
@ -3,11 +3,21 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased] Version 0.7.0-beta - 2020-06-06
|
||||
## [Upcoming] Version 0.7.1-beta - 2020-06-08
|
||||
### Added
|
||||
- handle replacement via slash command
|
||||
|
||||
## Version 0.6.0 - 2020-06-05
|
||||
## Version 0.7.0-beta - 2020-06-07
|
||||
### Added
|
||||
- order buttons
|
||||
### Changed
|
||||
- use numeric LogLevel over booleans
|
||||
- exact case option reversed (again)
|
||||
- smart case handling if replacement is longer than match
|
||||
### Fixed
|
||||
- Deletion of all mappings
|
||||
|
||||
## Version 0.6.0 (unreleased) - 2020-06-05
|
||||
### Added
|
||||
- honour capital/mixed cases for ignore case
|
||||
- consolidate consecutive matches
|
||||
@ -23,7 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Added
|
||||
- add replacements via options UI
|
||||
|
||||
## Version 0.4.0 - 2020-05-30
|
||||
## Version 0.4.0 (unreleased) - 2020-05-30
|
||||
### Added
|
||||
- restructured files
|
||||
- extract functions and color codes
|
||||
@ -33,13 +43,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Fixed
|
||||
- fixed DB storange and debug printing
|
||||
|
||||
## Version 0.2.2 - 2020-05-26
|
||||
## Version 0.2.2 (unreleased) - 2020-05-26
|
||||
### Added
|
||||
- added Options UI under Interface Options
|
||||
- store settings in profiles
|
||||
- added more translations
|
||||
|
||||
## Version 0.2.1 - 2020-05-25
|
||||
## Version 0.2.1 (unreleased) - 2020-05-25
|
||||
### Added
|
||||
- support automatic packaging for curseforge via .pkgmeta
|
||||
- include project logo
|
||||
@ -52,6 +62,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- handle SendChatMessage ordering if addon Misspelled is also installed
|
||||
- break long texts in chunks of 255 length
|
||||
|
||||
## Version 0.1 - 2020-05-24
|
||||
## Version 0.1 (unreleased) - 2020-05-24
|
||||
### Added
|
||||
- bootstrap addon with Ace3 based on [Misspelled](https://www.curseforge.com/wow/addons/misspelled)
|
@ -22,10 +22,8 @@ local Grichelde = LibStub("AceAddon-3.0"):NewAddon(AddonTable, AddonName, "AceCo
|
||||
Grichelde.L = LibStub("AceLocale-3.0"):GetLocale("Grichelde", true)
|
||||
Grichelde.version = GetAddOnMetadata(AddonName, "Version")
|
||||
Grichelde.build = GetAddOnMetadata(AddonName, "X-Build") or "Experimental"
|
||||
Grichelde.hooks = {}
|
||||
Grichelde.classic = _G.WOW_PROJECT_ID == _G.WOW_PROJECT_CLASSIC
|
||||
Grichelde.debug = false
|
||||
Grichelde.trace = false
|
||||
Grichelde.logLevel = 0 -- cannot reference Grichelde.LOG_LEVELs here as they are loaded afterwards
|
||||
|
||||
-- publish to global env
|
||||
_G.Grichelde = Grichelde
|
||||
@ -38,9 +36,8 @@ function Grichelde:OnInitialize()
|
||||
|
||||
self.options, self.dialog = self:SetupOptions()
|
||||
|
||||
-- load replacements from database
|
||||
-- populate UI from database
|
||||
self:RefreshOptions("OnProfileChanged")
|
||||
self:DebugPrint(self.db.profile)
|
||||
|
||||
self:SetupSlashCommands()
|
||||
end
|
||||
|
@ -3,7 +3,7 @@
|
||||
## Title: Grichelde
|
||||
## Notes: Replaces characters from the chat box
|
||||
## Notes-de: Ersetzt eingegebene Zeichen in der Chat-Zeile
|
||||
## Version: 0.6.0
|
||||
## Version: 0.7.0-beta
|
||||
## Author: Teilzeit-Jedi
|
||||
## eMail: tj@teilzeit-jedi.de
|
||||
|
||||
|
@ -210,7 +210,36 @@ function Grichelde:ReplaceCharacters(text)
|
||||
local replace = replTable.replaceText
|
||||
consolidate[replName] = {}
|
||||
|
||||
if replTable.ignoreCase then
|
||||
if replTable.exactCase then
|
||||
-- exact case
|
||||
self:DebugPrint("ReplaceCharacters : \"%s => %s\" (exact case)", search, replace)
|
||||
local pos, offset = 1, 0
|
||||
local oldResult = result
|
||||
|
||||
local pos1, pos2 = find(oldResult, search, pos)
|
||||
while (pos1 and pos2) do
|
||||
self:TracePrint("pos1: %d, pos2: %d", pos1, pos2)
|
||||
local pre = sub(result, 1, pos1 - 1 + offset)
|
||||
local post = sub(result, pos2 + 1 + offset)
|
||||
self:TracePrint("pre: %s, post: %s", pre, post)
|
||||
|
||||
-- actual replacement
|
||||
result = pre .. replace .. post
|
||||
self:DebugPrint("result: %s", result)
|
||||
|
||||
-- remember positions for consolidate
|
||||
if replTable.consolidate then
|
||||
tInsert(consolidate[replName], pos1 + offset)
|
||||
end
|
||||
|
||||
-- replacement text can lengthen or shorten the resulting text
|
||||
-- after replacement result and lowerResult can have different sizes
|
||||
offset = offset + length(replace) - length(search)
|
||||
-- update values for next iteration
|
||||
pos = pos2 + 1
|
||||
pos1, pos2 = find(oldResult, search, pos)
|
||||
end
|
||||
else
|
||||
self:DebugPrint("ReplaceCharacters : \"%s => %s\" (ignoreCase)", search, replace)
|
||||
local pos, offset = 1, 0
|
||||
local lowerResult = toLower(result)
|
||||
@ -253,19 +282,26 @@ function Grichelde:ReplaceCharacters(text)
|
||||
self:TracePrint("rest: %s, n: %s, lastCase: %s", remainingReplace, nextLetter, lastCase)
|
||||
|
||||
if (isUpper(nextLetter)) then
|
||||
repl = repl .. toUpper(remainingReplace)
|
||||
if lastCase == nil or lastCase == false then
|
||||
repl = repl .. remainingReplace
|
||||
else
|
||||
repl = repl .. toUpper(remainingReplace)
|
||||
end
|
||||
elseif (isLower(nextLetter)) then
|
||||
repl = repl .. toLower(remainingReplace)
|
||||
if lastCase == nil or lastCase == true then
|
||||
repl = repl .. remainingReplace
|
||||
else
|
||||
repl = repl .. toLower(remainingReplace)
|
||||
end
|
||||
else
|
||||
-- no letter
|
||||
repl = repl .. remainingReplace
|
||||
-- if lastCase == nil then
|
||||
-- repl = repl .. remainingReplace
|
||||
-- elseif lastCase == false then
|
||||
-- repl = repl .. toLower(remainingReplace)
|
||||
-- else
|
||||
-- repl = repl .. toUpper(remainingReplace)
|
||||
-- end
|
||||
if lastCase == nil then
|
||||
repl = repl .. remainingReplace
|
||||
elseif lastCase == false then
|
||||
repl = repl .. toLower(remainingReplace)
|
||||
else
|
||||
repl = repl .. toUpper(remainingReplace)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -285,35 +321,6 @@ function Grichelde:ReplaceCharacters(text)
|
||||
pos = pos2 + 1
|
||||
pos1, pos2 = find(lowerResult, lowerSearch, pos)
|
||||
end
|
||||
else
|
||||
-- exact case
|
||||
self:DebugPrint("ReplaceCharacters : \"%s => %s\" (exact case)", search, replace)
|
||||
local pos, offset = 1, 0
|
||||
local oldResult = result
|
||||
|
||||
local pos1, pos2 = find(oldResult, search, pos)
|
||||
while (pos1 and pos2) do
|
||||
self:TracePrint("pos1: %d, pos2: %d", pos1, pos2)
|
||||
local pre = sub(result, 1, pos1 - 1 + offset)
|
||||
local post = sub(result, pos2 + 1 + offset)
|
||||
self:TracePrint("pre: %s, post: %s", pre, post)
|
||||
|
||||
-- actual replacement
|
||||
result = pre .. replace .. post
|
||||
self:DebugPrint("result: %s", result)
|
||||
|
||||
-- remember positions for consolidate
|
||||
if replTable.consolidate then
|
||||
tInsert(consolidate[replName], pos1 + offset)
|
||||
end
|
||||
|
||||
-- replacement text can lengthen or shorten the resulting text
|
||||
-- after replacement result and lowerResult can have different sizes
|
||||
offset = offset + length(replace) - length(search)
|
||||
-- update values for next iteration
|
||||
pos = pos2 + 1
|
||||
pos1, pos2 = find(oldResult, search, pos)
|
||||
end
|
||||
end
|
||||
|
||||
if before ~= result then
|
||||
|
@ -2,23 +2,28 @@
|
||||
local _G = _G
|
||||
local Grichelde = _G.Grichelde
|
||||
|
||||
-- upvalues and constants
|
||||
-- constants and upvalues
|
||||
Grichelde.LOG_LEVEL = {}
|
||||
Grichelde.LOG_LEVEL.DEBUG = 1
|
||||
Grichelde.LOG_LEVEL.TRACE = 2
|
||||
|
||||
Grichelde.MAPPING_OFFSET = 10
|
||||
|
||||
-- colors:
|
||||
Grichelde.COLOR_CODES = {}
|
||||
Grichelde.COLOR_CODES.PREFIX = "|c00FFAA00"
|
||||
-- https://github.com/stoneharry/Misc-WoW-Stuff/blob/master/EoC%20Interface/FrameXML/Constants.lua
|
||||
Grichelde.COLOR_CODES.NORMAL = _G.NORMAL_FONT_COLOR_CODE or "|cffffd200";
|
||||
Grichelde.COLOR_CODES.HIGHLIGHT = _G.HIGHLIGHT_FONT_COLOR_CODE or "|cffffffff";
|
||||
Grichelde.COLOR_CODES.RED = _G.RED_FONT_COLOR_CODE or "|cffff2020";
|
||||
Grichelde.COLOR_CODES.GREEN = _G.GREEN_FONT_COLOR_CODE or "|cff20ff20";
|
||||
Grichelde.COLOR_CODES.LIGHTGRAY = "|cffC0C0C0";
|
||||
Grichelde.COLOR_CODES.GRAY = _G.GRAY_FONT_COLOR_CODE or "|cff808080";
|
||||
Grichelde.COLOR_CODES.DARKGRAY = "|cff404040";
|
||||
Grichelde.COLOR_CODES.YELLOW = _G.YELLOW_FONT_COLOR_CODE or "|cffffff00";
|
||||
Grichelde.COLOR_CODES.LIGHTYELLOW = _G.LIGHTYELLOW_FONT_COLOR_CODE or "|cffffff9a";
|
||||
Grichelde.COLOR_CODES.ORANGE = _G.ORANGE_FONT_COLOR_CODE or "|cffff7f3f";
|
||||
Grichelde.COLOR_CODES.CLOSE = _G.FONT_COLOR_CODE_CLOSE or "|r";
|
||||
Grichelde.COLOR_CODES.NORMAL = _G.NORMAL_FONT_COLOR_CODE or "|cffffd200"
|
||||
Grichelde.COLOR_CODES.HIGHLIGHT = _G.HIGHLIGHT_FONT_COLOR_CODE or "|cffffffff"
|
||||
Grichelde.COLOR_CODES.RED = _G.RED_FONT_COLOR_CODE or "|cffff2020"
|
||||
Grichelde.COLOR_CODES.GREEN = _G.GREEN_FONT_COLOR_CODE or "|cff20ff20"
|
||||
Grichelde.COLOR_CODES.LIGHTGRAY = "|cffC0C0C0"
|
||||
Grichelde.COLOR_CODES.GRAY = _G.GRAY_FONT_COLOR_CODE or "|cff808080"
|
||||
Grichelde.COLOR_CODES.DARKGRAY = "|cff404040"
|
||||
Grichelde.COLOR_CODES.YELLOW = _G.YELLOW_FONT_COLOR_CODE or "|cffffff00"
|
||||
Grichelde.COLOR_CODES.LIGHTYELLOW = _G.LIGHTYELLOW_FONT_COLOR_CODE or "|cffffff9a"
|
||||
Grichelde.COLOR_CODES.ORANGE = _G.ORANGE_FONT_COLOR_CODE or "|cffff7f3f"
|
||||
Grichelde.COLOR_CODES.CLOSE = _G.FONT_COLOR_CODE_CLOSE or "|r"
|
||||
|
||||
Grichelde.slashCommands = { "/s", "/say", "/e", "/em", "/me", "/emote", "/y", "/yell", "/sh", "/shout", "/p", "/party", "/pl", "/partyleader", "/g", "/gc", "/guild", "/o", "/osay", "/officer", "/raid", "/rsay", "/rl", "/raidleader", "/rw", "/raidwarning", "/i", "/instance", "/bg", "/battleground", "/w", "/whisper", "/t", "/tell", "/send", "/r", "/reply" }
|
||||
|
||||
@ -47,6 +52,8 @@ local function spairs(t, orderFunc)
|
||||
it = it + 1
|
||||
if sortedKeys[it] then
|
||||
return sortedKeys[it], t[sortedKeys[it]]
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -89,20 +96,20 @@ local function tClone(orig)
|
||||
return copy
|
||||
end
|
||||
|
||||
local function isChar(char)
|
||||
return Grichelde.functions.find(char, "%a+")
|
||||
local function isChar(word)
|
||||
return Grichelde.functions.find(word, "%a+")
|
||||
end
|
||||
|
||||
local function isNumber(digit)
|
||||
return Grichelde.functions.find(Grichelde.functions.toString(digit), "%d+")
|
||||
return Grichelde.functions.find(digit, "%d+")
|
||||
end
|
||||
|
||||
local function isUpper(char)
|
||||
return Grichelde.functions.isChar(char) and char == Grichelde.functions.toUpper(char)
|
||||
local function isUpper(word)
|
||||
return Grichelde.functions.isChar(word) and word == Grichelde.functions.toUpper(word)
|
||||
end
|
||||
|
||||
local function isLower(char)
|
||||
return Grichelde.functions.isChar(char) and char == Grichelde.functions.toLower(char)
|
||||
local function isLower(word)
|
||||
return Grichelde.functions.isChar(word) and word == Grichelde.functions.toLower(word)
|
||||
end
|
||||
|
||||
local function isCapital(word)
|
||||
|
@ -2,8 +2,8 @@
|
||||
local _G = _G
|
||||
local Grichelde = _G.Grichelde
|
||||
|
||||
local spairs, unpack, join, toString
|
||||
= Grichelde.functions.spairs, Grichelde.functions.unpack, Grichelde.functions.join, Grichelde.functions.toString
|
||||
local pairs, tInsert, tClone, unpack, join, toString
|
||||
= Grichelde.functions.pairs, Grichelde.functions.tInsert, Grichelde.functions.tClone, Grichelde.functions.unpack, Grichelde.functions.join, Grichelde.functions.toString
|
||||
|
||||
function Grichelde:GetDefaultConfig()
|
||||
return {
|
||||
@ -24,21 +24,28 @@ function Grichelde:GetDefaultConfig()
|
||||
order = 9999,
|
||||
searchText = "",
|
||||
replaceText = "",
|
||||
ignoreCase = true,
|
||||
exactCase = false,
|
||||
consolidate = true,
|
||||
},
|
||||
replacement_0 = {
|
||||
order = 5,
|
||||
replacement_10 = {
|
||||
order = 10,
|
||||
searchText = "s",
|
||||
replaceText = "ch",
|
||||
ignoreCase = true,
|
||||
exactCase = false,
|
||||
consolidate = true,
|
||||
},
|
||||
replacement_1 = {
|
||||
order = 9,
|
||||
replacement_11 = {
|
||||
order = 11,
|
||||
searchText = "t",
|
||||
replaceText = "ck",
|
||||
ignoreCase = true,
|
||||
exactCase = false,
|
||||
consolidate = true,
|
||||
},
|
||||
replacement_12 = {
|
||||
order = 12,
|
||||
searchText = "Zark",
|
||||
replaceText = "toter Schamane",
|
||||
exactCase = false,
|
||||
consolidate = true,
|
||||
}
|
||||
}
|
||||
@ -59,10 +66,17 @@ function Grichelde:LoadDatabase()
|
||||
end
|
||||
|
||||
function Grichelde:SyncToDatabase(info, val)
|
||||
self:TracePrint("SyncToDatabase : info")
|
||||
for i = 0, #info do
|
||||
self:TracePrint("%d = %s", i, info[i])
|
||||
end
|
||||
|
||||
local option = self.db.profile
|
||||
local path = 1
|
||||
while (path < #info) do
|
||||
option = option[info[path]] -- or nil
|
||||
if info[path] ~= "mappings" then
|
||||
option = option[info[path]] -- or nil
|
||||
end
|
||||
path = path + 1
|
||||
end
|
||||
local optionPath = join(".", unpack(info, 1, #info))
|
||||
@ -71,36 +85,72 @@ function Grichelde:SyncToDatabase(info, val)
|
||||
end
|
||||
|
||||
function Grichelde:ReadFromDatabase(info)
|
||||
self:TracePrint("ReadFromDatabase : info")
|
||||
for i = 0, #info do
|
||||
self:TracePrint("%d = %s", i, info[i])
|
||||
end
|
||||
|
||||
local option = self.db.profile
|
||||
local path = 1
|
||||
while (path <= #info) do
|
||||
option = option[info[path]] -- or nil
|
||||
if info[path] ~= "mappings" then
|
||||
option = option[info[path]] -- or nil
|
||||
end
|
||||
path = path + 1
|
||||
end
|
||||
local optionPath = join(".", unpack(info, 1, #info))
|
||||
self:TracePrint("read option \"%s\": %s", optionPath, toString(option))
|
||||
self:DebugPrint("read option \"%s\": %s", optionPath, toString(option))
|
||||
return option
|
||||
end
|
||||
|
||||
--- Sorts a replacements table by order sub-field.
|
||||
--- Usually called with with self.db.profile.replacements
|
||||
-- @param replacementsTable table
|
||||
-- @return table
|
||||
function Grichelde:ReorderReplacements(replacementsTable)
|
||||
local replacements = replacementsTable or {}
|
||||
--- Sorts a replacements table by order sub-field and rename.
|
||||
--- Do NOT reassign self.db.profile.replacements here or with its output as it will break defaults
|
||||
function Grichelde:ReorderReplacements()
|
||||
local replacements = self.db.profile.replacements or {}
|
||||
|
||||
self:TracePrint("ReorderReplacements : unsorted table")
|
||||
self:TracePrint(replacementsTable)
|
||||
self:TracePrint(replacements)
|
||||
|
||||
local sortedReplacements = {}
|
||||
|
||||
local index = 0
|
||||
for _, replTable in spairs(replacements) do
|
||||
sortedReplacements["replacement_" .. index] = replTable
|
||||
sortedReplacements["replacement_" .. index].order = index
|
||||
index = index + 1
|
||||
local orderToName = {}
|
||||
local size = 0
|
||||
for replName, replTable in pairs(replacements) do
|
||||
size = size + 1
|
||||
tInsert(orderToName, replTable.order, replName)
|
||||
end
|
||||
|
||||
self:TracePrint("ReorderReplacements : sorted table")
|
||||
self:TracePrint(sortedReplacements)
|
||||
return sortedReplacements
|
||||
self:TracePrint("ReorderReplacements : size: %d, orderToName", size)
|
||||
self:TracePrint(orderToName)
|
||||
|
||||
local sorted = {}
|
||||
local index, count = 0, 0
|
||||
|
||||
while count < size do
|
||||
local replName = orderToName[index]
|
||||
if replName and replacements[replName] then
|
||||
self:TracePrint("ReorderReplacements : replName: %s, replTable", replName)
|
||||
self:TracePrint(replacements[replName])
|
||||
local order = Grichelde.MAPPING_OFFSET + count
|
||||
sorted["replacement_" .. order] = tClone(replacements[replName])
|
||||
sorted["replacement_" .. order].order = order
|
||||
count = count + 1
|
||||
end
|
||||
index = index + 1
|
||||
if ( index > 10000) then break end
|
||||
end
|
||||
|
||||
-- self:TracePrint("ReorderReplacements : sorted")
|
||||
-- self:TracePrint(sorted)
|
||||
|
||||
-- do NOT set self.db.profile.replacements = {} it will break defaults
|
||||
for replName, _ in pairs(replacements) do
|
||||
replacements[replName] = nil
|
||||
end
|
||||
|
||||
-- copy over sorted replacements
|
||||
for replName, replTable in pairs(sorted) do
|
||||
replacements[replName] = replTable
|
||||
end
|
||||
|
||||
self:DebugPrint("ReorderReplacements : sorted table")
|
||||
self:DebugPrint(self.db.profile.replacements)
|
||||
end
|
@ -2,8 +2,8 @@
|
||||
local _G = _G
|
||||
local Grichelde = _G.Grichelde
|
||||
|
||||
local nilOrEmpty, pairs, tSize, unpack, find, join, toString, toNumber
|
||||
= Grichelde.functions.nilOrEmpty, Grichelde.functions.pairs, Grichelde.functions.tSize, Grichelde.functions.unpack, Grichelde.functions.find, Grichelde.functions.join, Grichelde.functions.toString, Grichelde.functions.toNumber
|
||||
local nilOrEmpty, pairs, find, match, toString, toNumber
|
||||
= Grichelde.functions.nilOrEmpty, Grichelde.functions.pairs, Grichelde.functions.find, Grichelde.functions.match, Grichelde.functions.toString, Grichelde.functions.toNumber
|
||||
|
||||
function Grichelde:CreateOptionsUI()
|
||||
return {
|
||||
@ -29,71 +29,81 @@ function Grichelde:CreateOptionsUI()
|
||||
name = self.L.Options_Channels_Group_Name,
|
||||
desc = self:Format(self.L.Options_Channels_Group_Desc, self.L.AddonName),
|
||||
args = {
|
||||
say = {
|
||||
order = 0,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelSay_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelSay_Desc, self.L.AddonName),
|
||||
},
|
||||
emote = {
|
||||
header = {
|
||||
order = 1,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelEmote_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelEmote_Desc, self.L.AddonName),
|
||||
type = "description",
|
||||
name = self.L.Options_Channels_Header
|
||||
},
|
||||
yell = {
|
||||
spacer = {
|
||||
order = 2,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelYell_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelYell_Desc, self.L.AddonName),
|
||||
type = "header",
|
||||
name = ""
|
||||
},
|
||||
party = {
|
||||
order = 3,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelParty_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelParty_Desc, self.L.AddonName),
|
||||
},
|
||||
guild = {
|
||||
order = 4,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelGuild_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelGuild_Desc, self.L.AddonName),
|
||||
},
|
||||
officer = {
|
||||
order = 5,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelOfficer_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelOfficer_Desc, self.L.AddonName),
|
||||
},
|
||||
raid = {
|
||||
order = 6,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelRaid_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelRaid_Desc, self.L.AddonName),
|
||||
},
|
||||
raidWarning = {
|
||||
order = 7,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelRaidWarning_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelRaidWarning_Desc, self.L.AddonName),
|
||||
},
|
||||
instance = {
|
||||
order = 8,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelInstance_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelInstance_Desc, self.L.AddonName),
|
||||
},
|
||||
battleground = {
|
||||
order = 9,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelBattleground_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelBattleground_Desc, self.L.AddonName),
|
||||
},
|
||||
whisper = {
|
||||
say = {
|
||||
order = 10,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channels_ChannelWhisper_Name,
|
||||
desc = self:Format(self.L.Options_Channels_ChannelWhisper_Desc, self.L.AddonName),
|
||||
name = self.L.Options_Channel_Say_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Say_Desc, self.L.AddonName),
|
||||
},
|
||||
emote = {
|
||||
order = 11,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Emote_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Emote_Desc, self.L.AddonName),
|
||||
},
|
||||
yell = {
|
||||
order = 12,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Yell_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Yell_Desc, self.L.AddonName),
|
||||
},
|
||||
party = {
|
||||
order = 13,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Party_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Party_Desc, self.L.AddonName),
|
||||
},
|
||||
guild = {
|
||||
order = 14,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Guild_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Guild_Desc, self.L.AddonName),
|
||||
},
|
||||
officer = {
|
||||
order = 15,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Officer_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Officer_Desc, self.L.AddonName),
|
||||
},
|
||||
raid = {
|
||||
order = 16,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Raid_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Raid_Desc, self.L.AddonName),
|
||||
},
|
||||
raidWarning = {
|
||||
order = 17,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_RaidWarning_Name,
|
||||
desc = self:Format(self.L.Options_Channel_RaidWarning_Desc, self.L.AddonName),
|
||||
},
|
||||
instance = {
|
||||
order = 18,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Instance_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Instance_Desc, self.L.AddonName),
|
||||
},
|
||||
battleground = {
|
||||
order = 19,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Battleground_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Battleground_Desc, self.L.AddonName),
|
||||
},
|
||||
whisper = {
|
||||
order = 20,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Channel_Whisper_Name,
|
||||
desc = self:Format(self.L.Options_Channel_Whisper_Desc, self.L.AddonName),
|
||||
},
|
||||
}
|
||||
},
|
||||
@ -110,7 +120,7 @@ function Grichelde:CreateOptionsUI()
|
||||
confirm = false,
|
||||
name = self.L.Options_Replacements_Add_Name,
|
||||
desc = self.L.Options_Replacements_Add_Desc,
|
||||
func = function(info) self:AddReplacement(info) end
|
||||
func = function(info) self:AddEmptyMapping(info) end
|
||||
},
|
||||
deleteAll = {
|
||||
order = 1,
|
||||
@ -119,55 +129,89 @@ function Grichelde:CreateOptionsUI()
|
||||
confirmText = self.L.Options_Replacements_DeleteAll_ConfirmText,
|
||||
name = self.L.Options_Replacements_DeleteAll_Name,
|
||||
desc = self.L.Options_Replacements_DeleteAll_Desc,
|
||||
func = function(info) self:DeleteAllReplacements(info) end
|
||||
}
|
||||
func = function(info) self:DeleteAllMappings(info) end
|
||||
},
|
||||
header = {
|
||||
order = 3,
|
||||
type = "description",
|
||||
name = self.L.Options_Replacements_Header
|
||||
},
|
||||
spacer = {
|
||||
order = 4,
|
||||
type = "header",
|
||||
name = ""
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
function Grichelde:CreateReplacement(offset)
|
||||
function Grichelde:CreateMapping(offset)
|
||||
return {
|
||||
order = offset or 9999,
|
||||
type = "group",
|
||||
name = function(info) return self:MappingName(info) end,
|
||||
desc = self.L.Options_Replacement_Group_Desc,
|
||||
desc = self.L.Options_Mapping_Group_Desc,
|
||||
childGroups = "tree",
|
||||
args = {
|
||||
searchText = {
|
||||
order = 0,
|
||||
type = "input",
|
||||
name = self.L.Options_Replacement_SearchText_Name,
|
||||
desc = self.L.Options_Replacement_SearchText_Desc,
|
||||
name = self.L.Options_Mapping_SearchText_Name,
|
||||
desc = self.L.Options_Mapping_SearchText_Desc,
|
||||
},
|
||||
replaceText = {
|
||||
order = 1,
|
||||
type = "input",
|
||||
name = self.L.Options_Replacement_ReplaceText_Name,
|
||||
desc = self.L.Options_Replacement_ReplaceText_Desc,
|
||||
name = self.L.Options_Mapping_ReplaceText_Name,
|
||||
desc = self.L.Options_Mapping_ReplaceText_Desc,
|
||||
},
|
||||
ignoreCase = {
|
||||
exactCase = {
|
||||
order = 2,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Replacement_IgnoreCase_Name,
|
||||
desc = self.L.Options_Replacement_IgnoreCase_Desc,
|
||||
name = self.L.Options_Mapping_ExactCase_Name,
|
||||
desc = self.L.Options_Mapping_ExactCase_Desc,
|
||||
width = "full",
|
||||
},
|
||||
consolidate = {
|
||||
order = 3,
|
||||
type = "toggle",
|
||||
name = self.L.Options_Replacement_Consolidate_Name,
|
||||
desc = self.L.Options_Replacement_Consolidate_Desc,
|
||||
width = 2
|
||||
name = self.L.Options_Mapping_Consolidate_Name,
|
||||
desc = self.L.Options_Mapping_Consolidate_Desc,
|
||||
width = "full"
|
||||
},
|
||||
moveUp = {
|
||||
order = 10,
|
||||
type = "execute",
|
||||
name = self.L.Options_Mapping_MoveUp_Name,
|
||||
desc = self.L.Options_Mapping_MoveUp_Desc,
|
||||
width = 0.25,
|
||||
func = function(info) self:MoveUp(info) end
|
||||
},
|
||||
moveDown = {
|
||||
order = 11,
|
||||
type = "execute",
|
||||
name = self.L.Options_Mapping_MoveDown_Name,
|
||||
desc = self.L.Options_Mapping_MoveDown_Desc,
|
||||
width = 0.25,
|
||||
func = function(info) self:MoveDown(info) end
|
||||
},
|
||||
spacer = {
|
||||
order = 18,
|
||||
type = "description",
|
||||
name = "",
|
||||
width = 1,
|
||||
},
|
||||
delete = {
|
||||
order = 4,
|
||||
order = 19,
|
||||
type = "execute",
|
||||
confirm = true,
|
||||
confirmText = self.L.Options_Replacements_Delete_ConfirmText,
|
||||
name = self.L.Options_Replacement_Delete_Name,
|
||||
desc = self.L.Options_Replacement_Delete_Desc,
|
||||
func = function(info) self:DeleteReplacement(info) end
|
||||
confirmText = self.L.Options_Mapping_Delete_ConfirmText,
|
||||
name = self.L.Options_Mapping_Delete_Name,
|
||||
desc = self.L.Options_Mapping_Delete_Desc,
|
||||
width = 0.5,
|
||||
func = function(info) self:DeleteMapping(info) end
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -195,17 +239,14 @@ function Grichelde:IsDisabled(info)
|
||||
end
|
||||
|
||||
function Grichelde:MappingName(info)
|
||||
local option = self.db.profile
|
||||
local path = 1
|
||||
while (path <= #info) do
|
||||
option = option[info[path]]
|
||||
path = path + 1
|
||||
end
|
||||
-- self:TracePrint("MappingName : info")
|
||||
-- self:TracePrint(info)
|
||||
local option = self.db.profile.replacements[info[2]]
|
||||
|
||||
if nilOrEmpty(option.searchText) and nilOrEmpty(option.replaceText) then
|
||||
return self.L.Options_Replacement_EmptyMapping
|
||||
return self.L.Options_Mapping_EmptyMapping
|
||||
else
|
||||
return self:Format(self.L.Options_Replacement_Group_Name, option.searchText or "", option.replaceText or "")
|
||||
return self:Format(self.L.Options_Mapping_Group_Name, option.searchText or "", option.replaceText or "")
|
||||
end
|
||||
end
|
||||
|
||||
@ -225,7 +266,7 @@ function Grichelde:RefreshOptions(event)
|
||||
self:DebugPrint("Refreshing Profile %s on options change: %s", self.db:GetCurrentProfile(), event)
|
||||
end
|
||||
|
||||
self.db.profile.replacements = self:ReorderReplacements(self.db.profile.replacements)
|
||||
self:ReorderReplacements()
|
||||
self:RefreshReplacements(self.db.profile.replacements)
|
||||
end
|
||||
|
||||
@ -246,62 +287,144 @@ function Grichelde:RefreshReplacements(replacementsTable)
|
||||
|
||||
for replName, _ in pairs(replacementsTable or {}) do
|
||||
local _, replNumber = self:SplitOnFirstMatch(replName, "_")
|
||||
replacements[replName] = self:CreateReplacement(toNumber(replNumber))
|
||||
replacements[replName] = self:CreateMapping(toNumber(replNumber))
|
||||
end
|
||||
|
||||
self:TracePrint("RefreshReplacements : UI options:")
|
||||
self:TracePrint(replacements)
|
||||
-- self:TracePrint("RefreshReplacements : UI options:")
|
||||
-- self:TracePrint(replacements)
|
||||
|
||||
self.dialog:ConfigTableChanged(nil, self.name)
|
||||
end
|
||||
|
||||
function Grichelde:AddReplacement()
|
||||
local replacements = self.db.profile.replacements
|
||||
self:DebugPrint("AddReplacements : old DB entries:")
|
||||
function Grichelde:AddEmptyMapping()
|
||||
local replacements = self.db.profile.replacements or {}
|
||||
|
||||
self:DebugPrint("AddEmptyMapping : old DB entries:")
|
||||
self:DebugPrint(replacements)
|
||||
|
||||
local maxRepl = tSize(replacements)
|
||||
local newMapping = "replacement_" .. maxRepl
|
||||
self:DebugPrint("AddReplacement : new replacement key:", newMapping)
|
||||
local maxRepl = Grichelde.MAPPING_OFFSET
|
||||
for replName, _ in pairs(replacements) do
|
||||
local num = match(replName, "^replacement_(%d+)")
|
||||
if num and maxRepl < toNumber(num) then
|
||||
maxRepl = toNumber(num)
|
||||
end
|
||||
end
|
||||
|
||||
-- setting replacements[newMapping] = {} will deactivate defaults
|
||||
replacements[newMapping].order = maxRepl
|
||||
self:DebugPrint("AddReplacements : new DB entries:")
|
||||
local newMapping = "replacement_" .. toString(maxRepl + 1)
|
||||
self:DebugPrint("AddEmptyMapping : new mapping key:", newMapping)
|
||||
|
||||
-- do NOT set self.db.profile.replacements = {} it will break defaults
|
||||
replacements[newMapping].order = toString(maxRepl + 1) -- will be reordered anyway
|
||||
self:DebugPrint("AddEmptyMapping : new DB entries:")
|
||||
self:DebugPrint(replacements)
|
||||
|
||||
--self.db.profile.replacements = replacements
|
||||
self:RefreshOptions("AddReplacement " .. newMapping)
|
||||
self:RefreshOptions("AddEmptyMapping " .. newMapping)
|
||||
self.dialog:SelectGroup(self.name, "replacements", newMapping)
|
||||
end
|
||||
|
||||
function Grichelde:DeleteReplacement(info)
|
||||
self:DebugPrint("DeleteReplacement")
|
||||
local option = self.db.profile
|
||||
local path = 1
|
||||
while (path < #info - 1) do
|
||||
option = option[info[path]]
|
||||
--self:DebugPrint(option)
|
||||
path = path + 1
|
||||
function Grichelde:MoveUp(info)
|
||||
self:TracePrint("MoveUp : info")
|
||||
for i = 0, #info do
|
||||
self:TracePrint("%d = %s", i, info[i])
|
||||
end
|
||||
local optionPath = join(".", unpack(info, 1, #info))
|
||||
self:DebugPrint("delete option \"%s\": %s", optionPath, toString(option[info[path]]))
|
||||
option[info[path]] = nil
|
||||
|
||||
self:RefreshOptions("DeleteReplacement " .. info[path])
|
||||
local replacements = self.db.profile.replacements or {}
|
||||
local currentName = info[2]
|
||||
|
||||
local _, replNumber = self:SplitOnFirstMatch(info[path], "_")
|
||||
self:DebugPrint("MoveUp : \"%s\"", currentName)
|
||||
self:DebugPrint(replacements[currentName])
|
||||
|
||||
local _, replNumber = self:SplitOnFirstMatch(currentName, "_")
|
||||
local currentOrder = toNumber(replNumber)
|
||||
|
||||
-- if not on top
|
||||
if currentOrder ~= Grichelde.MAPPING_OFFSET then
|
||||
local swapName = "replacement_" .. toString(currentOrder - 1)
|
||||
|
||||
-- swap ordering
|
||||
self:DebugPrint("swap with option %s", swapName)
|
||||
|
||||
replacements[swapName].order = currentOrder
|
||||
replacements[currentName].order = currentOrder - 1
|
||||
|
||||
self:RefreshOptions("MoveUp " .. currentName)
|
||||
|
||||
self:DebugPrint("MoveUp : refresh focus on %s", swapName)
|
||||
self.dialog:SelectGroup(self.name, "replacements", swapName)
|
||||
else
|
||||
self:DebugPrint("MoveUp : already on top")
|
||||
end
|
||||
end
|
||||
|
||||
function Grichelde:MoveDown(info)
|
||||
self:TracePrint("MoveDown : info")
|
||||
for i = 0, #info do
|
||||
self:TracePrint("%d = %s", i, info[i])
|
||||
end
|
||||
|
||||
local replacements = self.db.profile.replacements or {}
|
||||
local currentName = info[2]
|
||||
|
||||
self:DebugPrint("MoveDown : \"%s\"", currentName)
|
||||
self:DebugPrint(replacements[currentName])
|
||||
|
||||
local _, replNumber = self:SplitOnFirstMatch(currentName, "_")
|
||||
local currentOrder = toNumber(replNumber)
|
||||
|
||||
local maxRepl = Grichelde.MAPPING_OFFSET
|
||||
for replName, _ in pairs(replacements) do
|
||||
local num = match(replName, "^replacement_(%d+)")
|
||||
if num and maxRepl < toNumber(num) then
|
||||
maxRepl = toNumber(num)
|
||||
end
|
||||
end
|
||||
|
||||
-- if not last element
|
||||
self:DebugPrint("MoveDown : maxRepl: %d", maxRepl)
|
||||
if currentOrder < maxRepl then
|
||||
local swapName = "replacement_" .. toString(currentOrder + 1)
|
||||
|
||||
-- swap ordering
|
||||
self:DebugPrint("swap with option %s", swapName)
|
||||
|
||||
replacements[swapName].order = currentOrder
|
||||
replacements[currentName].order = currentOrder + 1
|
||||
|
||||
self:RefreshOptions("MoveDown " .. currentName)
|
||||
|
||||
self:DebugPrint("MoveDown : refresh focus on %s", swapName)
|
||||
self.dialog:SelectGroup(self.name, "replacements", swapName)
|
||||
else
|
||||
self:DebugPrint("MoveDown : already at bottom")
|
||||
end
|
||||
end
|
||||
|
||||
function Grichelde:DeleteMapping(info)
|
||||
self:TracePrint("DeleteMapping : info")
|
||||
for i = 0, #info do
|
||||
self:TracePrint("%d = %s", i, info[i])
|
||||
end
|
||||
|
||||
local currentName = info[2]
|
||||
|
||||
self:DebugPrint("delete option: %s", currentName)
|
||||
self.db.profile.replacements[currentName] = nil
|
||||
|
||||
self:RefreshOptions("DeleteMapping " .. currentName)
|
||||
|
||||
local _, replNumber = self:SplitOnFirstMatch(currentName, "_")
|
||||
local newMapping = "replacement_" .. toNumber(replNumber - 1)
|
||||
self.dialog:SelectGroup(self.name, "replacements", newMapping)
|
||||
end
|
||||
|
||||
function Grichelde:DeleteAllReplacements()
|
||||
self:DebugPrint("DeleteAllReplacements : ")
|
||||
function Grichelde:DeleteAllMappings()
|
||||
self:DebugPrint("DeleteAllMappings")
|
||||
|
||||
--self.db.profile.replacements = {}
|
||||
-- do NOT set self.db.profile.replacements = {} it will break defaults
|
||||
for replName, _ in pairs(self.db.profile.replacements or {}) do
|
||||
self.db.profile.replacements[replName] = nil
|
||||
end
|
||||
self:AddReplacement()
|
||||
self:AddEmptyMapping()
|
||||
|
||||
self:RefreshOptions("DeleteAllReplacements")
|
||||
self:RefreshOptions("DeleteAllMappings")
|
||||
end
|
||||
|
@ -12,7 +12,7 @@ function Grichelde:Upgrade_To_v060()
|
||||
self:DebugPrint(replacements)
|
||||
|
||||
for _, replTable in pairs(replacements) do
|
||||
replTable.ignoreCase = not replTable["caseSensitive"]
|
||||
replTable["ignoreCase"] = not replTable["caseSensitive"]
|
||||
replTable["caseSensitive"] = nil
|
||||
end
|
||||
|
||||
@ -21,13 +21,26 @@ function Grichelde:Upgrade_To_v060()
|
||||
return 0, 6, 0
|
||||
end
|
||||
|
||||
--[[
|
||||
function Grichelde:Upgrade_To_v061()
|
||||
return 0, 6, 1
|
||||
function Grichelde:Upgrade_To_v070()
|
||||
self:PrefixedPrint(self.L.Upgrade_ToVersion, Grichelde.COLOR_CODES.ORANGE .. "0.7.0" .. Grichelde.COLOR_CODES.CLOSE)
|
||||
|
||||
local replacements = self.db.profile.replacements or {}
|
||||
self:DebugPrint("Upgrade_To_070 : old database")
|
||||
self:DebugPrint(replacements)
|
||||
|
||||
for _, replTable in pairs(replacements) do
|
||||
replTable["exactCase"] = not replTable["ignoreCase"]
|
||||
replTable["ignoreCase"] = nil
|
||||
end
|
||||
|
||||
self:DebugPrint("Upgrade_To_070 : new database")
|
||||
self:DebugPrint(replacements)
|
||||
return 0, 7, 0
|
||||
end
|
||||
|
||||
function Grichelde:Upgrade_To_v070()
|
||||
return 0, 7, 0
|
||||
--[[
|
||||
function Grichelde:Upgrade_To_v071()
|
||||
return 0, 7, 1
|
||||
end
|
||||
]]
|
||||
|
||||
@ -46,17 +59,17 @@ function Grichelde:UpgradeDatabase()
|
||||
upgrade = upgrade + 1
|
||||
major, minor, patch = self:Upgrade_To_v060(dbVersion)
|
||||
end
|
||||
--[[
|
||||
if minor == 6 then
|
||||
if patch < 1 then
|
||||
upgrade = upgrade + 1
|
||||
major, minor, patch = self:Upgrade_To_v061(dbVersion)
|
||||
end
|
||||
end
|
||||
if minor < 7 then
|
||||
upgrade = upgrade + 1
|
||||
major, minor, patch = self:Upgrade_To_v070(dbVersion)
|
||||
end
|
||||
--[[
|
||||
if minor == 7 then
|
||||
if patch < 1 then
|
||||
upgrade = upgrade + 1
|
||||
major, minor, patch = self:Upgrade_To_v71(dbVersion)
|
||||
end
|
||||
end
|
||||
]]
|
||||
end
|
||||
|
||||
|
@ -121,18 +121,27 @@ function Grichelde:PrefixedPrint(...)
|
||||
end
|
||||
|
||||
function Grichelde:DebugPrint(obj, ...)
|
||||
local function prefixedDebugPrint(...)
|
||||
self:LogPrint(Grichelde.LOG_LEVEL.DEBUG, function(...)
|
||||
print(self.COLOR_CODES.GRAY .. self.L.AddonName .. self.COLOR_CODES.CLOSE .. ":", self:Format(...))
|
||||
end
|
||||
end, obj, ...)
|
||||
end
|
||||
|
||||
if (self.debug) then
|
||||
function Grichelde:TracePrint(obj, ...)
|
||||
self:LogPrint(Grichelde.LOG_LEVEL.TRACE, function(...)
|
||||
print(self.COLOR_CODES.DARKGRAY .. self.L.AddonName .. self.COLOR_CODES.CLOSE .. ":", self:Format(...))
|
||||
end, obj, ...)
|
||||
end
|
||||
|
||||
function Grichelde:LogPrint(logLevel, printFunc, obj, ...)
|
||||
if (self.logLevel >= logLevel) then
|
||||
local printF = printFunc or print
|
||||
if obj == nil then
|
||||
prefixedDebugPrint("<nil>")
|
||||
printF("<nil>")
|
||||
else
|
||||
if type(obj) == "string" then
|
||||
local l = select("#", ...)
|
||||
if ( l == 0 or not find(obj, "%%")) then
|
||||
prefixedDebugPrint(obj, ...)
|
||||
printF(obj, ...)
|
||||
else
|
||||
-- sanitize nil values in vararg
|
||||
local packed = { ... }
|
||||
@ -144,48 +153,21 @@ function Grichelde:DebugPrint(obj, ...)
|
||||
-- self:tPrint(packed)
|
||||
-- cannot assign unpacked to a vararg variable and print it for debug
|
||||
local fmtMsg = format(obj, unpack(packed, 1, l)) -- manually set count as unpack() stops on nil (bug with #table)
|
||||
prefixedDebugPrint(fmtMsg)
|
||||
printF(fmtMsg)
|
||||
end
|
||||
elseif type(obj) == "table" then
|
||||
tPrint(obj, 0, {}, prefixedDebugPrint)
|
||||
tPrint(obj, 0, {}, printF)
|
||||
else
|
||||
prefixedDebugPrint(plainValue(obj))
|
||||
printF(plainValue(obj))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Grichelde:TracePrint(obj, ...)
|
||||
local function prefixedTracePrint(...)
|
||||
print(self.COLOR_CODES.DARKGRAY .. self.L.AddonName .. self.COLOR_CODES.CLOSE .. ":", self:Format(...))
|
||||
end
|
||||
function Grichelde:PrintOptions()
|
||||
self:DebugPrint(self.options.args.replacements.args)
|
||||
end
|
||||
|
||||
if (self.debug and self.trace) then
|
||||
if obj == nil then
|
||||
prefixedTracePrint("<nil>")
|
||||
else
|
||||
if type(obj) == "string" then
|
||||
local l = select("#", ...)
|
||||
if ( l == 0 or not find(obj, "%%")) then
|
||||
prefixedTracePrint(obj, ...)
|
||||
else
|
||||
-- sanitize nil values in vararg
|
||||
local packed = { ... }
|
||||
for i = 1, l do
|
||||
packed[i] = toString(packed[i]) or "nil"
|
||||
end
|
||||
|
||||
-- print("packed = ", packed)
|
||||
-- self:tPrint(packed)
|
||||
-- cannot assign unpacked to a vararg variable and print it for debug
|
||||
local fmtMsg = format(obj, unpack(packed, 1, l)) -- manually set count as unpack() stops on nil (bug with #table)
|
||||
prefixedTracePrint(fmtMsg)
|
||||
end
|
||||
elseif type(obj) == "table" then
|
||||
tPrint(obj, 0, {}, prefixedTracePrint)
|
||||
else
|
||||
prefixedTracePrint(plainValue(obj))
|
||||
end
|
||||
end
|
||||
end
|
||||
function Grichelde:PrintMappings()
|
||||
self:DebugPrint(self.db.profile.replacements)
|
||||
end
|
@ -26,32 +26,34 @@ L.Options_Enabled_Desc = "Aktiviert %s"
|
||||
|
||||
L.Options_Channels_Group_Name = "Kan\195\164le"
|
||||
L.Options_Channels_Group_Desc = "%s ist in folgenden Kan\195\164len aktiv."
|
||||
L.Options_Channels_ChannelSay_Name = "Sagen"
|
||||
L.Options_Channels_ChannelSay_Desc = "Aktiviert %s im Kanal \"Sagen\"."
|
||||
L.Options_Channels_ChannelEmote_Name = "Emote"
|
||||
L.Options_Channels_ChannelEmote_Desc = "Aktiviert %s im Kanal \"Emote\"."
|
||||
L.Options_Channels_ChannelYell_Name = "Schreien"
|
||||
L.Options_Channels_ChannelYell_Desc = "Aktiviert %s im Kanal \"Schreien\"."
|
||||
L.Options_Channels_ChannelParty_Name = "Gruppe"
|
||||
L.Options_Channels_ChannelParty_Desc = "Aktiviert %s im Kanal \"Gruppe\"."
|
||||
L.Options_Channels_ChannelPartyLeader_Name = "Gruppenanf\195\188hrer"
|
||||
L.Options_Channels_ChannelPartyLeader_Desc = "Aktiviert %s im Kanal \"Gruppenanf\195\188hrer\"."
|
||||
L.Options_Channels_ChannelGuild_Name = "Gilde"
|
||||
L.Options_Channels_ChannelGuild_Desc = "Aktiviert %s im Kanal \"Gilde\"."
|
||||
L.Options_Channels_ChannelOfficer_Name = "Offiziere"
|
||||
L.Options_Channels_ChannelOfficer_Desc = "Aktiviert %s im Kanal \"Offiziere\"."
|
||||
L.Options_Channels_ChannelRaid_Name = "Schlachtzug"
|
||||
L.Options_Channels_ChannelRaid_Desc = "Aktiviert %s im Kanal \"Schlachtzug\"."
|
||||
L.Options_Channels_ChannelRaidLeader_Name = "Schlachtzugsanf\195\188hrer"
|
||||
L.Options_Channels_ChannelRaidLeader_Desc = "Aktiviert %s im Kanal \"Schlachtzugsanf\195\188hrer\"."
|
||||
L.Options_Channels_ChannelRaidWarning_Name = "Schlachtzugswarnung"
|
||||
L.Options_Channels_ChannelRaidWarning_Desc = "Aktiviert %s im Kanal \"Schlachtzugswarnung."
|
||||
L.Options_Channels_ChannelInstance_Name = "Instanz"
|
||||
L.Options_Channels_ChannelInstance_Desc = "Aktiviert %s im Kanal \"Instanz\"."
|
||||
L.Options_Channels_ChannelBattleground_Name = "Schlachtfeld"
|
||||
L.Options_Channels_ChannelBattleground_Desc = "Aktiviert %s im Kanal \"Schlachtfeld\"."
|
||||
L.Options_Channels_ChannelWhisper_Name = "Fl\195\188stern"
|
||||
L.Options_Channels_ChannelWhisper_Desc = "Aktiviert %s im Kanal \"Fl\195\188stern\"."
|
||||
L.Options_Channels_Header = "Eine Ersetzung wird nur in den unten markierten Kan\195\164len durchgef\195\188hrt:"
|
||||
|
||||
L.Options_Channel_Say_Name = "Sagen"
|
||||
L.Options_Channel_Say_Desc = "Aktiviert %s im Kanal \"Sagen\"."
|
||||
L.Options_Channel_Emote_Name = "Emote"
|
||||
L.Options_Channel_Emote_Desc = "Aktiviert %s im Kanal \"Emote\"."
|
||||
L.Options_Channel_Yell_Name = "Schreien"
|
||||
L.Options_Channel_Yell_Desc = "Aktiviert %s im Kanal \"Schreien\"."
|
||||
L.Options_Channel_Party_Name = "Gruppe"
|
||||
L.Options_Channel_Party_Desc = "Aktiviert %s im Kanal \"Gruppe\"."
|
||||
L.Options_Channel_PartyLeader_Name = "Gruppenanf\195\188hrer"
|
||||
L.Options_Channel_PartyLeader_Desc = "Aktiviert %s im Kanal \"Gruppenanf\195\188hrer\"."
|
||||
L.Options_Channel_Guild_Name = "Gilde"
|
||||
L.Options_Channel_Guild_Desc = "Aktiviert %s im Kanal \"Gilde\"."
|
||||
L.Options_Channel_Officer_Name = "Offiziere"
|
||||
L.Options_Channel_Officer_Desc = "Aktiviert %s im Kanal \"Offiziere\"."
|
||||
L.Options_Channel_Raid_Name = "Schlachtzug"
|
||||
L.Options_Channel_Raid_Desc = "Aktiviert %s im Kanal \"Schlachtzug\"."
|
||||
L.Options_Channel_RaidLeader_Name = "Schlachtzugsanf\195\188hrer"
|
||||
L.Options_Channel_RaidLeader_Desc = "Aktiviert %s im Kanal \"Schlachtzugsanf\195\188hrer\"."
|
||||
L.Options_Channel_RaidWarning_Name = "Schlachtzugswarnung"
|
||||
L.Options_Channel_RaidWarning_Desc = "Aktiviert %s im Kanal \"Schlachtzugswarnung."
|
||||
L.Options_Channel_Instance_Name = "Instanz"
|
||||
L.Options_Channel_Instance_Desc = "Aktiviert %s im Kanal \"Instanz\"."
|
||||
L.Options_Channel_Battleground_Name = "Schlachtfeld"
|
||||
L.Options_Channel_Battleground_Desc = "Aktiviert %s im Kanal \"Schlachtfeld\"."
|
||||
L.Options_Channel_Whisper_Name = "Fl\195\188stern"
|
||||
L.Options_Channel_Whisper_Desc = "Aktiviert %s im Kanal \"Fl\195\188stern\"."
|
||||
|
||||
L.Options_Replacements_Group_Name = "Ersetzungen"
|
||||
L.Options_Replacements_Group_Desc = "Diese Vorkommen werden in den aktivierten Kan\195\164len ersetzt."
|
||||
@ -60,18 +62,25 @@ L.Options_Replacements_Add_Desc = "F\195\188gt eine neue Zuordnung hinzu."
|
||||
L.Options_Replacements_DeleteAll_Name = "Alle L\195\182schen"
|
||||
L.Options_Replacements_DeleteAll_Desc = "L\195\182scht alle Zuweisungen."
|
||||
L.Options_Replacements_DeleteAll_ConfirmText="Wirklich ALLE Zuweisungen l\195\182schen?"
|
||||
|
||||
L.Options_Replacement_Group_Name = "%s => %s"
|
||||
L.Options_Replacement_Group_Desc = "Dieses Vorkommen wird in den aktivierten Kan\195\164len ersetzt."
|
||||
L.Options_Replacement_EmptyMapping = "(keine)"
|
||||
L.Options_Replacement_SearchText_Name = "Suchtext:"
|
||||
L.Options_Replacement_SearchText_Desc = "Dieser Text wird in der Chateingabe gesucht."
|
||||
L.Options_Replacement_ReplaceText_Name = "Ersetzung:"
|
||||
L.Options_Replacement_ReplaceText_Desc = "Jeder Suchtreffer wird mit diesem Text ersetzt."
|
||||
L.Options_Replacement_IgnoreCase_Name = "ignoriere Gro\195\159- und Kleinschreibung"
|
||||
L.Options_Replacement_IgnoreCase_Desc = "Wenn nicht gesetzt, muss die Groß\195\159- und Kleinschreibung des Suchtextes exakt \195\188berein stimmen.|nDie Groß\195\159schreibung jedes Zeichens wird bei der Ersetzung \195\188bernommen."
|
||||
L.Options_Replacement_Consolidate_Name = "Fa\195\159e aufeinanderfolgende Treffer zusammen"
|
||||
L.Options_Replacement_Consolidate_Desc = "Wenn durch die Ersetzung die Zeichenfolge mehrfach hintereinander steht,|nfasse sie zu einem Vorkommen zusammen."
|
||||
L.Options_Replacement_Delete_Name = "L\195\182schen"
|
||||
L.Options_Replacement_Delete_Desc = "L\195\182scht diese Zuweisung."
|
||||
L.Options_Replacements_Delete_ConfirmText="Diese Zuweisung l\195\182schen?"
|
||||
L.Options_Replacements_Header = "Die Vorkommen links vom Pfeil ( => ) werden in den aktivierten Kan\195\164len gesucht und durch den Text rechts vom Pfeil ersetzt."
|
||||
.."|nWird die Groß\195\159- und Kleinschreibung ignoriert, wird die Groß\195\159schreibung jedes Zeichens wird bei der Ersetzung \195\188bernommen."
|
||||
.."|nDas Zusammenfassen aufeinanderfolgender Treffer vermeidet unsch\195\182ne Wiederholungen, die durch die Ersetzung entstehen k\195\182nnen."
|
||||
.."|nMit den beiden Standard-Ersetzung wird so aus \"Tasse\" => \"Ckache\"."
|
||||
L.Options_Mapping_Group_Name = "%s => %s"
|
||||
L.Options_Mapping_Group_Desc = "Dieses Vorkommen wird in den aktivierten Kan\195\164len ersetzt."
|
||||
L.Options_Mapping_EmptyMapping = "(keine)"
|
||||
L.Options_Mapping_SearchText_Name = "Suchtext:"
|
||||
L.Options_Mapping_SearchText_Desc = "Dieser Text wird in der Chateingabe gesucht."
|
||||
L.Options_Mapping_ReplaceText_Name = "Ersetzung:"
|
||||
L.Options_Mapping_ReplaceText_Desc = "Jeder Suchtreffer wird mit diesem Text ersetzt."
|
||||
L.Options_Mapping_ExactCase_Name = "exakte Gro\195\159- und Kleinschreibung"
|
||||
L.Options_Mapping_ExactCase_Desc = "Wenn gesetzt, muss die Groß\195\159- und Kleinschreibung des Suchtextes exakt \195\188berein stimmen. Anderfalls wird die Groß\195\159schreibung jedes Zeichens bei der Ersetzung \195\188bernommen."
|
||||
L.Options_Mapping_Consolidate_Name = "Fa\195\159e aufeinanderfolgende Treffer zusammen"
|
||||
L.Options_Mapping_Consolidate_Desc = "Wenn durch die Ersetzung die Zeichenfolge mehrfach hintereinander steht,|nfasse sie zu einem Vorkommen zusammen."
|
||||
L.Options_Mapping_MoveUp_Name = "^"
|
||||
L.Options_Mapping_MoveUp_Desc = "nach oben verschieben"
|
||||
L.Options_Mapping_MoveDown_Name = "v"
|
||||
L.Options_Mapping_MoveDown_Desc = "nach unten verschieben"
|
||||
L.Options_Mapping_Delete_Name = "L\195\182schen"
|
||||
L.Options_Mapping_Delete_Desc = "L\195\182scht diese Zuweisung."
|
||||
L.Options_Mapping_Delete_ConfirmText="Diese Zuweisung l\195\182schen?"
|
@ -26,32 +26,34 @@ L.Options_Enabled_Desc = "Enables %s"
|
||||
|
||||
L.Options_Channels_Group_Name = "Channels"
|
||||
L.Options_Channels_Group_Desc = "%s is active in the following channels."
|
||||
L.Options_Channels_ChannelSay_Name = "Say"
|
||||
L.Options_Channels_ChannelSay_Desc = "Activates %s in channel \"Say\"."
|
||||
L.Options_Channels_ChannelEmote_Name = "Emote"
|
||||
L.Options_Channels_ChannelEmote_Desc = "Activates %s in channel \"Emote\"."
|
||||
L.Options_Channels_ChannelYell_Name = "Yell"
|
||||
L.Options_Channels_ChannelYell_Desc = "Activates %s in channel \"Yell\"."
|
||||
L.Options_Channels_ChannelParty_Name = "Party"
|
||||
L.Options_Channels_ChannelParty_Desc = "Activates %s in channel \"Party\"."
|
||||
L.Options_Channels_ChannelPartyLeader_Name = "Party Leader"
|
||||
L.Options_Channels_ChannelPartyLeader_Desc = "Activates %s in channel \"Party Leader\"."
|
||||
L.Options_Channels_ChannelGuild_Name = "Guild"
|
||||
L.Options_Channels_ChannelGuild_Desc = "Activates %s in channel \"Guild\"."
|
||||
L.Options_Channels_ChannelOfficer_Name = "Officers"
|
||||
L.Options_Channels_ChannelOfficer_Desc = "Activates %s in channel \"Officers\"."
|
||||
L.Options_Channels_ChannelRaid_Name = "Raid"
|
||||
L.Options_Channels_ChannelRaid_Desc = "Activates %s in channel \"Raid\"."
|
||||
L.Options_Channels_ChannelRaidLeader_Name = "Raid Leader"
|
||||
L.Options_Channels_ChannelRaidLeader_Desc = "Activates %s in channel \"Raid Leader\"."
|
||||
L.Options_Channels_ChannelRaidWarning_Name = "Raid Warning"
|
||||
L.Options_Channels_ChannelRaidWarning_Desc = "Activates %s in channel \"Raid Warning\"."
|
||||
L.Options_Channels_ChannelInstance_Name = "Instance"
|
||||
L.Options_Channels_ChannelInstance_Desc = "Activates %s in channel \"Instance\"."
|
||||
L.Options_Channels_ChannelBattleground_Name = "Battleground"
|
||||
L.Options_Channels_ChannelBattleground_Desc = "Activates %s in channel \"Battleground\"."
|
||||
L.Options_Channels_ChannelWhisper_Name = "Whisper"
|
||||
L.Options_Channels_ChannelWhisper_Desc = "Activates %s in channel \"Whisper\"."
|
||||
L.Options_Channels_Header = "Text replacement will only be done for marked channels below:"
|
||||
|
||||
L.Options_Channel_Say_Name = "Say"
|
||||
L.Options_Channel_Say_Desc = "Activates %s in channel \"Say\"."
|
||||
L.Options_Channel_Emote_Name = "Emote"
|
||||
L.Options_Channel_Emote_Desc = "Activates %s in channel \"Emote\"."
|
||||
L.Options_Channel_Yell_Name = "Yell"
|
||||
L.Options_Channel_Yell_Desc = "Activates %s in channel \"Yell\"."
|
||||
L.Options_Channel_Party_Name = "Party"
|
||||
L.Options_Channel_Party_Desc = "Activates %s in channel \"Party\"."
|
||||
L.Options_Channel_PartyLeader_Name = "Party Leader"
|
||||
L.Options_Channel_PartyLeader_Desc = "Activates %s in channel \"Party Leader\"."
|
||||
L.Options_Channel_Guild_Name = "Guild"
|
||||
L.Options_Channel_Guild_Desc = "Activates %s in channel \"Guild\"."
|
||||
L.Options_Channel_Officer_Name = "Officers"
|
||||
L.Options_Channel_Officer_Desc = "Activates %s in channel \"Officers\"."
|
||||
L.Options_Channel_Raid_Name = "Raid"
|
||||
L.Options_Channel_Raid_Desc = "Activates %s in channel \"Raid\"."
|
||||
L.Options_Channel_RaidLeader_Name = "Raid Leader"
|
||||
L.Options_Channel_RaidLeader_Desc = "Activates %s in channel \"Raid Leader\"."
|
||||
L.Options_Channel_RaidWarning_Name = "Raid Warning"
|
||||
L.Options_Channel_RaidWarning_Desc = "Activates %s in channel \"Raid Warning\"."
|
||||
L.Options_Channel_Instance_Name = "Instance"
|
||||
L.Options_Channel_Instance_Desc = "Activates %s in channel \"Instance\"."
|
||||
L.Options_Channel_Battleground_Name = "Battleground"
|
||||
L.Options_Channel_Battleground_Desc = "Activates %s in channel \"Battleground\"."
|
||||
L.Options_Channel_Whisper_Name = "Whisper"
|
||||
L.Options_Channel_Whisper_Desc = "Activates %s in channel \"Whisper\"."
|
||||
|
||||
L.Options_Replacements_Group_Name = "Replacements"
|
||||
L.Options_Replacements_Group_Desc = "These lookups will be replaced in activated channels."
|
||||
@ -60,18 +62,25 @@ L.Options_Replacements_Add_Desc = "Adds a new replacement mapping."
|
||||
L.Options_Replacements_DeleteAll_Name = "Delete All"
|
||||
L.Options_Replacements_DeleteAll_Desc = "Deletes all replacement mappings."
|
||||
L.Options_Replacements_DeleteAll_ConfirmText = "Do you really want to delete ALL replacement mappings?"
|
||||
|
||||
L.Options_Replacement_Group_Name = "%s => %s"
|
||||
L.Options_Replacement_Group_Desc = "This lookup will be replaced in activated channels."
|
||||
L.Options_Replacement_EmptyMapping = "(none)"
|
||||
L.Options_Replacement_SearchText_Name = "Search for:"
|
||||
L.Options_Replacement_SearchText_Desc = "This text is looked up in your chat input box."
|
||||
L.Options_Replacement_ReplaceText_Name = "Replacement:"
|
||||
L.Options_Replacement_ReplaceText_Desc = "Any match will be replaced with this text."
|
||||
L.Options_Replacement_IgnoreCase_Name = "ignore case"
|
||||
L.Options_Replacement_IgnoreCase_Desc = "When deactivated matches are case-sensitive.|nThe case for each letter of the matching text is honoured when replaced."
|
||||
L.Options_Replacement_Consolidate_Name = "consolidate consecutive matches"
|
||||
L.Options_Replacement_Consolidate_Desc = "If after the replacement a text sequence is repeated|ndirectly after another, treat them as one occurrence."
|
||||
L.Options_Replacement_Delete_Name = "Delete"
|
||||
L.Options_Replacement_Delete_Desc = "Deletes this replacement mapping."
|
||||
L.Options_Replacements_Delete_ConfirmText = "Delete this replacement mapping?"
|
||||
L.Options_Replacements_Header = "All matches on the lefthand side of the arrow ( => ) will be replaced in activated channels by the text on the righthand side."
|
||||
.. "|nIf case sensivity is ignored, the case for each letter of the matching text is taken over when replaced."
|
||||
.. "|nConsolidation of consecutive matches prevent unaesthetic repetitions of letters introduced by replacements."
|
||||
.. "|nWith both default mappings active, the mapping would be \"Tossing\" => \"Ckoching\"."
|
||||
L.Options_Mapping_Group_Name = "%s => %s"
|
||||
L.Options_Mapping_Group_Desc = "This lookup will be replaced in activated channels."
|
||||
L.Options_Mapping_EmptyMapping = "(none)"
|
||||
L.Options_Mapping_SearchText_Name = "Search for:"
|
||||
L.Options_Mapping_SearchText_Desc = "This text is looked up in your chat input box."
|
||||
L.Options_Mapping_ReplaceText_Name = "Replacement:"
|
||||
L.Options_Mapping_ReplaceText_Desc = "Any match will be replaced with this text."
|
||||
L.Options_Mapping_ExactCase_Name = "exact case"
|
||||
L.Options_Mapping_ExactCase_Desc = "When set, matches must be case-sensitive. Otherwise the case for each letter of the matching text is taken over when replaced."
|
||||
L.Options_Mapping_Consolidate_Name = "consolidate consecutive matches"
|
||||
L.Options_Mapping_Consolidate_Desc = "If after the replacement a text sequence is repeated|ndirectly after another, treat them as one occurrence."
|
||||
L.Options_Mapping_MoveUp_Name = "^"
|
||||
L.Options_Mapping_MoveUp_Desc = "move up"
|
||||
L.Options_Mapping_MoveDown_Name = "v"
|
||||
L.Options_Mapping_MoveDown_Desc = "move down"
|
||||
L.Options_Mapping_Delete_Name = "Delete"
|
||||
L.Options_Mapping_Delete_Desc = "Deletes this replacement mapping."
|
||||
L.Options_Mapping_Delete_ConfirmText = "Delete this replacement mapping?"
|
Loading…
x
Reference in New Issue
Block a user