diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..55b78e7 --- /dev/null +++ b/.luarc.json @@ -0,0 +1,6 @@ +{ + "diagnostics.disable": [ + "undefined-field", + "undefined-global" + ] +} diff --git a/Fonts-4-WoW_Cata.toc b/Fonts-4-WoW_Cata.toc new file mode 100755 index 0000000..4bf0bf8 --- /dev/null +++ b/Fonts-4-WoW_Cata.toc @@ -0,0 +1,13 @@ +## Interface: 40400 +## X-Min-Interface: 40400 + +## Version: 1.0.0 +## Author: Matias Pujado +## Title: |cFF00FF80Fonts4-WoW|r +## Title-esES: |cFF00FF80Custom Selection of Fonts for World of Warcraft Cata|r +## Notes: Fonts for World of Warcraft Cata +## Notes-esES: Fuentes para World of Warcraft Cata +## DefaultState: Enable + +libs\LibSharedMedia-3.0\lib.xml +core.lua diff --git a/Fonts-4-WoW_Retail.toc b/Fonts-4-WoW_Retail.toc new file mode 100755 index 0000000..fb0f415 --- /dev/null +++ b/Fonts-4-WoW_Retail.toc @@ -0,0 +1,14 @@ +## Interface: 100207, 110000, 110002 +## X-Min-Interface: 100207 +## X-Interface: Retail + +## Version: 1.0.0 +## Author: Matias Pujado +## Title: |cFF00FF80Fonts4-WoW|r +## Title-esES: |cFF00FF80Custom Selection of Fonts for World of Warcraft|r +## Notes: Fonts for World of Warcraft +## Notes-esES: Fuentes para World of Warcraft +## DefaultState: Enable + +libs\LibSharedMedia-3.0\lib.xml +core.lua diff --git a/Fonts-4-WoW_TBC.toc b/Fonts-4-WoW_TBC.toc new file mode 100755 index 0000000..d7bf8c2 --- /dev/null +++ b/Fonts-4-WoW_TBC.toc @@ -0,0 +1,13 @@ +## Interface: 20504 +## X-Min-Interface: 20504 + +## Version: 1.0.0 +## Author: Matias Pujado +## Title: |cFF00FF80Fonts4-WoW|r +## Title-esES: |cFF00FF80Custom Selection of Fonts for World of Warcraft TBC|r +## Notes: Fonts for World of Warcraft TBC +## Notes-esES: Fuentes para World of Warcraft TBC +## DefaultState: Enable + +libs\LibSharedMedia-3.0\lib.xml +core.lua diff --git a/Fonts-4-WoW_Vanilla.toc b/Fonts-4-WoW_Vanilla.toc new file mode 100755 index 0000000..ca6634b --- /dev/null +++ b/Fonts-4-WoW_Vanilla.toc @@ -0,0 +1,12 @@ +## Interface: 11503 + +## Version: 1.0.0 +## Author: Matias Pujado +## Title: |cFF00FF80Fonts4-WoW|r +## Title-esES: |cFF00FF80Custom Selection of Fonts for World of Warcraft Vanilla|r +## Notes: Fonts for World of Warcraft Vanilla +## Notes-esES: Fuentes para World of Warcraft Vanilla +## DefaultState: Enable + +libs\LibSharedMedia-3.0\lib.xml +core.lua diff --git a/Fonts-4-WoW_WOTLK.toc b/Fonts-4-WoW_WOTLK.toc new file mode 100755 index 0000000..e0af90b --- /dev/null +++ b/Fonts-4-WoW_WOTLK.toc @@ -0,0 +1,13 @@ +## Interface: 30403 +## X-Min-Interface: 30403 + +## Version: 1.0.0 +## Author: Matias Pujado +## Title: |cFF00FF80Fonts4-WoW|r +## Title-esES: |cFF00FF80Custom Selection of Fonts for World of Warcraft WOTLK|r +## Notes: Fonts for World of Warcraft WOTLK +## Notes-esES: Fuentes para World of Warcraft WOTLK +## DefaultState: Enable + +libs\LibSharedMedia-3.0\lib.xml +core.lua diff --git a/core.lua b/core.lua new file mode 100755 index 0000000..3589513 --- /dev/null +++ b/core.lua @@ -0,0 +1,13 @@ +local LibStub = LibStub or _G.LibStub + +local LSM = LibStub("LibSharedMedia-3.0") + +LSM:Register("font", "Ubuntu", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu.ttf]]) +LSM:Register("font", "Ubuntu-Regular", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-Regular.ttf]]) +LSM:Register("font", "Ubuntu-MediumItalic", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-MediumItalic.ttf]]) +LSM:Register("font", "Ubuntu-Medium", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-Medium.ttf]]) +LSM:Register("font", "Ubuntu-LightItalic", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-LightItalic.ttf]]) +LSM:Register("font", "Ubuntu-Light", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-Light.ttf]]) +LSM:Register("font", "Ubuntu-Italic", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-Italic.ttf]]) +LSM:Register("font", "Ubuntu-BoldItalic", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-BoldItalic.ttf]]) +LSM:Register("font", "Ubuntu-Bold", [[Interface\AddOns\Fonts4-WoW\fonts\Ubuntu\Ubuntu-Bold.ttf]]) diff --git a/fonts/Ubuntu/UFL.txt b/fonts/Ubuntu/UFL.txt new file mode 100755 index 0000000..6e722c8 --- /dev/null +++ b/fonts/Ubuntu/UFL.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/Ubuntu/Ubuntu-Bold.ttf b/fonts/Ubuntu/Ubuntu-Bold.ttf new file mode 100755 index 0000000..c2293d5 Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-Bold.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-BoldItalic.ttf b/fonts/Ubuntu/Ubuntu-BoldItalic.ttf new file mode 100755 index 0000000..ce6e784 Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-BoldItalic.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-Italic.ttf b/fonts/Ubuntu/Ubuntu-Italic.ttf new file mode 100755 index 0000000..a599244 Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-Italic.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-Light.ttf b/fonts/Ubuntu/Ubuntu-Light.ttf new file mode 100755 index 0000000..b310d15 Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-Light.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-LightItalic.ttf b/fonts/Ubuntu/Ubuntu-LightItalic.ttf new file mode 100755 index 0000000..ad0741b Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-LightItalic.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-Medium.ttf b/fonts/Ubuntu/Ubuntu-Medium.ttf new file mode 100755 index 0000000..7340a40 Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-Medium.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-MediumItalic.ttf b/fonts/Ubuntu/Ubuntu-MediumItalic.ttf new file mode 100755 index 0000000..36ac1ae Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-MediumItalic.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-Mono.ttf b/fonts/Ubuntu/Ubuntu-Mono.ttf new file mode 100755 index 0000000..bb6f178 Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-Mono.ttf differ diff --git a/fonts/Ubuntu/Ubuntu-Regular.ttf b/fonts/Ubuntu/Ubuntu-Regular.ttf new file mode 100755 index 0000000..f98a2da Binary files /dev/null and b/fonts/Ubuntu/Ubuntu-Regular.ttf differ diff --git a/fonts/Ubuntu/Ubuntu.ttf b/fonts/Ubuntu/Ubuntu.ttf new file mode 100755 index 0000000..1ec9ede Binary files /dev/null and b/fonts/Ubuntu/Ubuntu.ttf differ diff --git a/libs/LibSharedMedia-3.0/CHANGES.txt b/libs/LibSharedMedia-3.0/CHANGES.txt new file mode 100755 index 0000000..6edfef2 --- /dev/null +++ b/libs/LibSharedMedia-3.0/CHANGES.txt @@ -0,0 +1,9 @@ +------------------------------------------------------------------------ +r142 | funkehdude | 2023-10-11 11:07:08 +0000 (Wed, 11 Oct 2023) | 1 line +Changed paths: + M /trunk/LibSharedMedia-3.0.toc + M /trunk/LibSharedMedia-3.0_Wrath.toc + +bump toc +------------------------------------------------------------------------ + diff --git a/libs/LibSharedMedia-3.0/CallbackHandler-1.0/CallbackHandler-1.0.lua b/libs/LibSharedMedia-3.0/CallbackHandler-1.0/CallbackHandler-1.0.lua new file mode 100755 index 0000000..44543d5 --- /dev/null +++ b/libs/LibSharedMedia-3.0/CallbackHandler-1.0/CallbackHandler-1.0.lua @@ -0,0 +1,202 @@ +--[[ $Id: CallbackHandler-1.0.lua 26 2022-12-12 15:09:39Z nevcairiel $ ]] +local MAJOR, MINOR = "CallbackHandler-1.0", 8 +local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) + +if not CallbackHandler then return end -- No upgrade needed + +local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} + +-- Lua APIs +local securecallfunction, error = securecallfunction, error +local setmetatable, rawget = setmetatable, rawget +local next, select, pairs, type, tostring = next, select, pairs, type, tostring + + +local function Dispatch(handlers, ...) + local index, method = next(handlers) + if not method then return end + repeat + securecallfunction(method, ...) + index, method = next(handlers, index) + until not method +end + +-------------------------------------------------------------------------- +-- CallbackHandler:New +-- +-- target - target object to embed public APIs in +-- RegisterName - name of the callback registration API, default "RegisterCallback" +-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" +-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. + +function CallbackHandler.New(_self, target, RegisterName, UnregisterName, UnregisterAllName) + + RegisterName = RegisterName or "RegisterCallback" + UnregisterName = UnregisterName or "UnregisterCallback" + if UnregisterAllName==nil then -- false is used to indicate "don't want this method" + UnregisterAllName = "UnregisterAllCallbacks" + end + + -- we declare all objects and exported APIs inside this closure to quickly gain access + -- to e.g. function names, the "target" parameter, etc + + + -- Create the registry object + local events = setmetatable({}, meta) + local registry = { recurse=0, events=events } + + -- registry:Fire() - fires the given event/message into the registry + function registry:Fire(eventname, ...) + if not rawget(events, eventname) or not next(events[eventname]) then return end + local oldrecurse = registry.recurse + registry.recurse = oldrecurse + 1 + + Dispatch(events[eventname], eventname, ...) + + registry.recurse = oldrecurse + + if registry.insertQueue and oldrecurse==0 then + -- Something in one of our callbacks wanted to register more callbacks; they got queued + for event,callbacks in pairs(registry.insertQueue) do + local first = not rawget(events, event) or not next(events[event]) -- test for empty before. not test for one member after. that one member may have been overwritten. + for object,func in pairs(callbacks) do + events[event][object] = func + -- fire OnUsed callback? + if first and registry.OnUsed then + registry.OnUsed(registry, target, event) + first = nil + end + end + end + registry.insertQueue = nil + end + end + + -- Registration of a callback, handles: + -- self["method"], leads to self["method"](self, ...) + -- self with function ref, leads to functionref(...) + -- "addonId" (instead of self) with function ref, leads to functionref(...) + -- all with an optional arg, which, if present, gets passed as first argument (after self if present) + target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]]) + if type(eventname) ~= "string" then + error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2) + end + + method = method or eventname + + local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. + + if type(method) ~= "string" and type(method) ~= "function" then + error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2) + end + + local regfunc + + if type(method) == "string" then + -- self["method"] calling style + if type(self) ~= "table" then + error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2) + elseif self==target then + error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2) + elseif type(self[method]) ~= "function" then + error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2) + end + + if select("#",...)>=1 then -- this is not the same as testing for arg==nil! + local arg=select(1,...) + regfunc = function(...) self[method](self,arg,...) end + else + regfunc = function(...) self[method](self,...) end + end + else + -- function ref with self=object or self="addonId" or self=thread + if type(self)~="table" and type(self)~="string" and type(self)~="thread" then + error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2) + end + + if select("#",...)>=1 then -- this is not the same as testing for arg==nil! + local arg=select(1,...) + regfunc = function(...) method(arg,...) end + else + regfunc = method + end + end + + + if events[eventname][self] or registry.recurse<1 then + -- if registry.recurse<1 then + -- we're overwriting an existing entry, or not currently recursing. just set it. + events[eventname][self] = regfunc + -- fire OnUsed callback? + if registry.OnUsed and first then + registry.OnUsed(registry, target, eventname) + end + else + -- we're currently processing a callback in this registry, so delay the registration of this new entry! + -- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency + registry.insertQueue = registry.insertQueue or setmetatable({},meta) + registry.insertQueue[eventname][self] = regfunc + end + end + + -- Unregister a callback + target[UnregisterName] = function(self, eventname) + if not self or self==target then + error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2) + end + if type(eventname) ~= "string" then + error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2) + end + if rawget(events, eventname) and events[eventname][self] then + events[eventname][self] = nil + -- Fire OnUnused callback? + if registry.OnUnused and not next(events[eventname]) then + registry.OnUnused(registry, target, eventname) + end + end + if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then + registry.insertQueue[eventname][self] = nil + end + end + + -- OPTIONAL: Unregister all callbacks for given selfs/addonIds + if UnregisterAllName then + target[UnregisterAllName] = function(...) + if select("#",...)<1 then + error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2) + end + if select("#",...)==1 and ...==target then + error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2) + end + + + for i=1,select("#",...) do + local self = select(i,...) + if registry.insertQueue then + for eventname, callbacks in pairs(registry.insertQueue) do + if callbacks[self] then + callbacks[self] = nil + end + end + end + for eventname, callbacks in pairs(events) do + if callbacks[self] then + callbacks[self] = nil + -- Fire OnUnused callback? + if registry.OnUnused and not next(callbacks) then + registry.OnUnused(registry, target, eventname) + end + end + end + end + end + end + + return registry +end + + +-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it +-- try to upgrade old implicit embeds since the system is selfcontained and +-- relies on closures to work. + diff --git a/libs/LibSharedMedia-3.0/LibSharedMedia-3.0.toc b/libs/LibSharedMedia-3.0/LibSharedMedia-3.0.toc new file mode 100755 index 0000000..e83e981 --- /dev/null +++ b/libs/LibSharedMedia-3.0/LibSharedMedia-3.0.toc @@ -0,0 +1,18 @@ +## Interface: 100107 +## LoadOnDemand: 1 + +## Title: Lib: SharedMedia-3.0 +## Notes: Shared handling of media data (fonts, sounds, textures, ...) between addons. +## Author: Elkano +## Version: 3.0-142 +## X-Website: https://www.curseforge.com/wow/addons/libsharedmedia-3-0 +## X-Category: Library + +## X-Revision: 142 +## X-Date: 2023-10-11T11:07:08Z + +LibStub\LibStub.lua +CallbackHandler-1.0\CallbackHandler-1.0.lua + +LibSharedMedia-3.0\lib.xml + diff --git a/libs/LibSharedMedia-3.0/LibSharedMedia-3.0/LibSharedMedia-3.0.lua b/libs/LibSharedMedia-3.0/LibSharedMedia-3.0/LibSharedMedia-3.0.lua new file mode 100755 index 0000000..8129a82 --- /dev/null +++ b/libs/LibSharedMedia-3.0/LibSharedMedia-3.0/LibSharedMedia-3.0.lua @@ -0,0 +1,301 @@ +--@curseforge-project-slug: libsharedmedia-3-0@ +--[[ +Name: LibSharedMedia-3.0 +Revision: $Revision: 128 $ +Author: Elkano (elkano@gmx.de) +Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com) +Website: http://www.wowace.com/projects/libsharedmedia-3-0/ +Description: Shared handling of media data (fonts, sounds, textures, ...) between addons. +Dependencies: LibStub, CallbackHandler-1.0 +License: LGPL v2.1 +]] + +local MAJOR, MINOR = "LibSharedMedia-3.0", 8020003 -- 8.2.0 v3 / increase manually on changes +local lib = LibStub:NewLibrary(MAJOR, MINOR) + +if not lib then return end + +local _G = getfenv(0) + +local pairs = _G.pairs +local type = _G.type + +local band = _G.bit.band +local table_sort = _G.table.sort + +local RESTRICTED_FILE_ACCESS = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE -- starting with 8.2, some rules for file access have changed; classic still uses the old way + +local locale = GetLocale() +local locale_is_western +local LOCALE_MASK = 0 +lib.LOCALE_BIT_koKR = 1 +lib.LOCALE_BIT_ruRU = 2 +lib.LOCALE_BIT_zhCN = 4 +lib.LOCALE_BIT_zhTW = 8 +lib.LOCALE_BIT_western = 128 + +local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0") + +lib.callbacks = lib.callbacks or CallbackHandler:New(lib) + +lib.DefaultMedia = lib.DefaultMedia or {} +lib.MediaList = lib.MediaList or {} +lib.MediaTable = lib.MediaTable or {} +lib.MediaType = lib.MediaType or {} +lib.OverrideMedia = lib.OverrideMedia or {} + +local defaultMedia = lib.DefaultMedia +local mediaList = lib.MediaList +local mediaTable = lib.MediaTable +local overrideMedia = lib.OverrideMedia + + +-- create mediatype constants +lib.MediaType.BACKGROUND = "background" -- background textures +lib.MediaType.BORDER = "border" -- border textures +lib.MediaType.FONT = "font" -- fonts +lib.MediaType.STATUSBAR = "statusbar" -- statusbar textures +lib.MediaType.SOUND = "sound" -- sound files + +-- populate lib with default Blizzard data +-- BACKGROUND +if not lib.MediaTable.background then lib.MediaTable.background = {} end +lib.MediaTable.background["None"] = [[]] +lib.MediaTable.background["Blizzard Collections Background"] = [[Interface\Collections\CollectionsBackgroundTile]] +lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]] +lib.MediaTable.background["Blizzard Dialog Background Dark"] = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]] +lib.MediaTable.background["Blizzard Dialog Background Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Background]] +lib.MediaTable.background["Blizzard Garrison Background"] = [[Interface\Garrison\GarrisonUIBackground]] +lib.MediaTable.background["Blizzard Garrison Background 2"] = [[Interface\Garrison\GarrisonUIBackground2]] +lib.MediaTable.background["Blizzard Garrison Background 3"] = [[Interface\Garrison\GarrisonMissionUIInfoBoxBackgroundTile]] +lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]] +lib.MediaTable.background["Blizzard Marble"] = [[Interface\FrameGeneral\UI-Background-Marble]] +lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]] +lib.MediaTable.background["Blizzard Parchment"] = [[Interface\AchievementFrame\UI-Achievement-Parchment-Horizontal]] +lib.MediaTable.background["Blizzard Parchment 2"] = [[Interface\AchievementFrame\UI-GuildAchievement-Parchment-Horizontal]] +lib.MediaTable.background["Blizzard Rock"] = [[Interface\FrameGeneral\UI-Background-Rock]] +lib.MediaTable.background["Blizzard Tabard Background"] = [[Interface\TabardFrame\TabardFrameBackground]] +lib.MediaTable.background["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Background]] +lib.MediaTable.background["Solid"] = [[Interface\Buttons\WHITE8X8]] +lib.DefaultMedia.background = "None" + +-- BORDER +if not lib.MediaTable.border then lib.MediaTable.border = {} end +lib.MediaTable.border["None"] = [[]] +lib.MediaTable.border["Blizzard Achievement Wood"] = [[Interface\AchievementFrame\UI-Achievement-WoodBorder]] +lib.MediaTable.border["Blizzard Chat Bubble"] = [[Interface\Tooltips\ChatBubble-Backdrop]] +lib.MediaTable.border["Blizzard Dialog"] = [[Interface\DialogFrame\UI-DialogBox-Border]] +lib.MediaTable.border["Blizzard Dialog Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Border]] +lib.MediaTable.border["Blizzard Party"] = [[Interface\CHARACTERFRAME\UI-Party-Border]] +lib.MediaTable.border["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Border]] +lib.DefaultMedia.border = "None" + +-- FONT +if not lib.MediaTable.font then lib.MediaTable.font = {} end +local SML_MT_font = lib.MediaTable.font +--[[ +All font files are currently in all clients, the following table depicts which font supports which charset as of 5.0.4 +Fonts were checked using langcover.pl from DejaVu fonts (http://sourceforge.net/projects/dejavu/) and FontForge (http://fontforge.org/) +latin means check for: de, en, es, fr, it, pt + +file name latin koKR ruRU zhCN zhTW +2002.ttf 2002 X X X - - +2002B.ttf 2002 Bold X X X - - +ARHei.ttf AR CrystalzcuheiGBK Demibold X - X X X +ARIALN.TTF Arial Narrow X - X - - +ARKai_C.ttf AR ZhongkaiGBK Medium (Combat) X - X X X +ARKai_T.ttf AR ZhongkaiGBK Medium X - X X X +bHEI00M.ttf AR Heiti2 Medium B5 - - - - X +bHEI01B.ttf AR Heiti2 Bold B5 - - - - X +bKAI00M.ttf AR Kaiti Medium B5 - - - - X +bLEI00D.ttf AR Leisu Demi B5 - - - - X +FRIZQT__.TTF Friz Quadrata TT X - - - - +FRIZQT___CYR.TTF FrizQuadrataCTT x - X - - +K_Damage.TTF YDIWingsM - X X - - +K_Pagetext.TTF MoK X X X - - +MORPHEUS.TTF Morpheus X - - - - +MORPHEUS_CYR.TTF Morpheus X - X - - +NIM_____.ttf Nimrod MT X - X - - +SKURRI.TTF Skurri X - - - - +SKURRI_CYR.TTF Skurri X - X - - + +WARNING: Although FRIZQT___CYR is available on western clients, it doesn't support special European characters e.g. é, ï, ö +Due to this, we cannot use it as a replacement for FRIZQT__.TTF +]] + +if locale == "koKR" then + LOCALE_MASK = lib.LOCALE_BIT_koKR +-- + SML_MT_font["굵은 글꼴"] = [[Fonts\2002B.TTF]] + SML_MT_font["기본 글꼴"] = [[Fonts\2002.TTF]] + SML_MT_font["데미지 글꼴"] = [[Fonts\K_Damage.TTF]] + SML_MT_font["퀘스트 글꼴"] = [[Fonts\K_Pagetext.TTF]] +-- + lib.DefaultMedia["font"] = "기본 글꼴" -- someone from koKR please adjust if needed +-- +elseif locale == "zhCN" then + LOCALE_MASK = lib.LOCALE_BIT_zhCN +-- + SML_MT_font["伤害数字"] = [[Fonts\ARKai_C.ttf]] + SML_MT_font["默认"] = [[Fonts\ARKai_T.ttf]] + SML_MT_font["聊天"] = [[Fonts\ARHei.ttf]] +-- + lib.DefaultMedia["font"] = "默认" -- someone from zhCN please adjust if needed +-- +elseif locale == "zhTW" then + LOCALE_MASK = lib.LOCALE_BIT_zhTW +-- + SML_MT_font["提示訊息"] = [[Fonts\bHEI00M.ttf]] + SML_MT_font["聊天"] = [[Fonts\bHEI01B.ttf]] + SML_MT_font["傷害數字"] = [[Fonts\bKAI00M.ttf]] + SML_MT_font["預設"] = [[Fonts\bLEI00D.ttf]] +-- + lib.DefaultMedia["font"] = "預設" -- someone from zhTW please adjust if needed + +elseif locale == "ruRU" then + LOCALE_MASK = lib.LOCALE_BIT_ruRU +-- + SML_MT_font["2002"] = [[Fonts\2002.TTF]] + SML_MT_font["2002 Bold"] = [[Fonts\2002B.TTF]] + SML_MT_font["AR CrystalzcuheiGBK Demibold"] = [[Fonts\ARHei.TTF]] + SML_MT_font["AR ZhongkaiGBK Medium (Combat)"] = [[Fonts\ARKai_C.TTF]] + SML_MT_font["AR ZhongkaiGBK Medium"] = [[Fonts\ARKai_T.TTF]] + SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]] + SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT___CYR.TTF]] + SML_MT_font["MoK"] = [[Fonts\K_Pagetext.TTF]] + SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS_CYR.TTF]] + SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]] + SML_MT_font["Skurri"] = [[Fonts\SKURRI_CYR.TTF]] +-- + lib.DefaultMedia.font = "Friz Quadrata TT" +-- +else + LOCALE_MASK = lib.LOCALE_BIT_western + locale_is_western = true +-- + SML_MT_font["2002"] = [[Fonts\2002.TTF]] + SML_MT_font["2002 Bold"] = [[Fonts\2002B.TTF]] + SML_MT_font["AR CrystalzcuheiGBK Demibold"] = [[Fonts\ARHei.TTF]] + SML_MT_font["AR ZhongkaiGBK Medium (Combat)"] = [[Fonts\ARKai_C.TTF]] + SML_MT_font["AR ZhongkaiGBK Medium"] = [[Fonts\ARKai_T.TTF]] + SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]] + SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]] + SML_MT_font["MoK"] = [[Fonts\K_Pagetext.TTF]] + SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS_CYR.TTF]] + SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]] + SML_MT_font["Skurri"] = [[Fonts\SKURRI_CYR.TTF]] +-- + lib.DefaultMedia.font = "Friz Quadrata TT" +-- +end + +-- STATUSBAR +if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end +lib.MediaTable.statusbar["Blizzard"] = [[Interface\TargetingFrame\UI-StatusBar]] +lib.MediaTable.statusbar["Blizzard Character Skills Bar"] = [[Interface\PaperDollInfoFrame\UI-Character-Skills-Bar]] +lib.MediaTable.statusbar["Blizzard Raid Bar"] = [[Interface\RaidFrame\Raid-Bar-Hp-Fill]] +lib.MediaTable.statusbar["Solid"] = [[Interface\Buttons\WHITE8X8]] +lib.DefaultMedia.statusbar = "Blizzard" + +-- SOUND +if not lib.MediaTable.sound then lib.MediaTable.sound = {} end +lib.MediaTable.sound["None"] = RESTRICTED_FILE_ACCESS and 1 or [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on these values. +lib.DefaultMedia.sound = "None" + +local function rebuildMediaList(mediatype) + local mtable = mediaTable[mediatype] + if not mtable then return end + if not mediaList[mediatype] then mediaList[mediatype] = {} end + local mlist = mediaList[mediatype] + -- list can only get larger, so simply overwrite it + local i = 0 + for k in pairs(mtable) do + i = i + 1 + mlist[i] = k + end + table_sort(mlist) +end + +function lib:Register(mediatype, key, data, langmask) + if type(mediatype) ~= "string" then + error(MAJOR..":Register(mediatype, key, data, langmask) - mediatype must be string, got "..type(mediatype)) + end + if type(key) ~= "string" then + error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key)) + end + mediatype = mediatype:lower() + if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then + -- ignore fonts that aren't flagged as supporting local glyphs on non-western clients + return false + end + if type(data) == "string" and (mediatype == lib.MediaType.BACKGROUND or mediatype == lib.MediaType.BORDER or mediatype == lib.MediaType.STATUSBAR or mediatype == lib.MediaType.SOUND) then + local path = data:lower() + if RESTRICTED_FILE_ACCESS and not path:find("^interface") then + -- files accessed via path only allowed from interface folder + return false + end + if mediatype == lib.MediaType.SOUND and not (path:find(".ogg", nil, true) or path:find(".mp3", nil, true)) then + -- Only ogg and mp3 are valid sounds. + return false + end + end + if not mediaTable[mediatype] then mediaTable[mediatype] = {} end + local mtable = mediaTable[mediatype] + if mtable[key] then return false end + + mtable[key] = data + rebuildMediaList(mediatype) + self.callbacks:Fire("LibSharedMedia_Registered", mediatype, key) + return true +end + +function lib:Fetch(mediatype, key, noDefault) + local mtt = mediaTable[mediatype] + local overridekey = overrideMedia[mediatype] + local result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil + return result ~= "" and result or nil +end + +function lib:IsValid(mediatype, key) + return mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false +end + +function lib:HashTable(mediatype) + return mediaTable[mediatype] +end + +function lib:List(mediatype) + if not mediaTable[mediatype] then + return nil + end + if not mediaList[mediatype] then + rebuildMediaList(mediatype) + end + return mediaList[mediatype] +end + +function lib:GetGlobal(mediatype) + return overrideMedia[mediatype] +end + +function lib:SetGlobal(mediatype, key) + if not mediaTable[mediatype] then + return false + end + overrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil + self.callbacks:Fire("LibSharedMedia_SetGlobal", mediatype, overrideMedia[mediatype]) + return true +end + +function lib:GetDefault(mediatype) + return defaultMedia[mediatype] +end + +function lib:SetDefault(mediatype, key) + if mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then + defaultMedia[mediatype] = key + return true + else + return false + end +end diff --git a/libs/LibSharedMedia-3.0/LibSharedMedia-3.0/lib.xml b/libs/LibSharedMedia-3.0/LibSharedMedia-3.0/lib.xml new file mode 100755 index 0000000..7313228 --- /dev/null +++ b/libs/LibSharedMedia-3.0/LibSharedMedia-3.0/lib.xml @@ -0,0 +1,4 @@ + +