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