rginda%netscape.com 320cedffc0 landing CHATZILLA_0_8_5_BRANCH, bug 103386, r=samuel@sieb.net, rs=brendan@mozilla.org
See the ChangeLog and bug for a full list of changes, and the branch checkin log for a blow by blow.


git-svn-id: svn://10.0.0.236/trunk@109581 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-04 00:20:48 +00:00

206 lines
6.8 KiB
JavaScript

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is ChatZilla
*
* The Initial Developer of the Original Code is New Dimensions Consulting,
* Inc. Portions created by New Dimensions Consulting, Inc. are
* Copyright (C) 1999 New Dimenstions Consulting, Inc. All
* Rights Reserved.
*
* Contributor(s):
* Robert Ginda, rginda@ndcico.com, original author
* Samuel Sieb, samuel@sieb.net, MIRC color codes
*/
function CMungerEntry (name, regex, className, enable, tagName)
{
this.name = name;
if (name[0] != ".")
this.description = getMsg("rule_" + name);
this.enabled = (typeof enable == "undefined" ? true : enable);
this.tagName = (tagName) ? tagName : "html:span";
if (regex instanceof RegExp)
this.regex = regex;
else
this.lambdaMatch = regex;
if (typeof className == "function")
this.lambdaReplace = className;
else
this.className = className;
}
function CMunger ()
{
this.entries = new Object();
}
CMunger.prototype.enabled = true;
CMunger.prototype.addRule =
function mng_addrule (name, regex, className, enable)
{
this.entries[name] = new CMungerEntry (name, regex, className, enable);
}
CMunger.prototype.delRule =
function mng_delrule (name)
{
delete this.entries[name];
}
CMunger.prototype.munge =
function mng_munge (text, containerTag, data)
{
var entry;
var ary;
var wbr, newClass;
if (!containerTag)
containerTag =
document.createElementNS ("http://www.w3.org/1999/xhtml",
this.tagName);
if (this.enabled)
{
for (entry in this.entries)
{
if (this.entries[entry].enabled)
{
if (typeof this.entries[entry].lambdaMatch == "function")
{
var rval;
rval = this.entries[entry].lambdaMatch(text, containerTag,
data,
this.entries[entry]);
if (rval)
ary = [(void 0), rval];
else
ary = null;
}
else
ary = text.match(this.entries[entry].regex);
if ((ary != null) && (ary[1]))
{
var startPos = text.indexOf(ary[1]);
if (typeof this.entries[entry].lambdaReplace == "function")
{
this.munge (text.substr(0,startPos), containerTag,
data);
this.entries[entry].lambdaReplace (ary[1], containerTag,
data,
this.entries[entry]);
this.munge (text.substr (startPos + ary[1].length,
text.length), containerTag,
data);
return containerTag;
}
else
{
this.munge (text.substr(0,startPos), containerTag,
data);
var subTag = document.createElementNS
("http://www.w3.org/1999/xhtml",
this.entries[entry].tagName);
newClass = this.entries[entry].className;
if ("hasColorInfo" in data)
{
if ("currFgColor" in data)
newClass += " chatzilla-fg" + data.currFgColor;
if ("currBgColor" in data)
newClass += " chatzilla-bg" + data.currBgColor;
if ("isBold" in data)
newClass += " chatzilla-bold";
if ("isUnderline" in data)
newClass += " chatzilla-underline";
}
subTag.setAttribute ("class", newClass);
var wordParts = splitLongWord (ary[1],
client.MAX_WORD_DISPLAY);
for (var i in wordParts)
{
subTag.appendChild (document.createTextNode (wordParts[i]));
wbr = document.createElementNS ("http://www.w3.org/1999/xhtml",
"html:wbr");
subTag.appendChild (wbr);
}
containerTag.appendChild (subTag);
this.munge (text.substr (startPos + ary[1].length,
text.length), containerTag,
data);
return containerTag;
}
}
}
}
}
var textNode = document.createTextNode (text);
if ("hasColorInfo" in data)
{
newClass = "";
if ("currFgColor" in data)
newClass = "chatzilla-fg" + data.currFgColor;
if ("currBgColor" in data)
newClass += " chatzilla-bg" + data.currBgColor;
if ("isBold" in data)
newClass += " chatzilla-bold";
if ("isUnderline" in data)
newClass += " chatzilla-underline";
if (newClass != "")
{
var newTag = document.createElementNS
("http://www.w3.org/1999/xhtml",
"html:span");
newTag.setAttribute ("class", newClass);
newTag.appendChild (textNode);
containerTag.appendChild (newTag);
}
else
{
delete data.hasColorInfo;
containerTag.appendChild (textNode);
}
wbr = document.createElementNS ("http://www.w3.org/1999/xhtml",
"html:wbr");
containerTag.appendChild (wbr);
}
else
containerTag.appendChild (textNode);
return containerTag;
}