www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 18c7e6728f305b7147edaf547e259f925d50cb1c
parent 833ad915f53a1e31402348891d6479428b57df73
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 18 Dec 2009 21:49:36 +0000

Fixes #1619, Underline formatting isn't preserved in citation editor

Frank's patch


Diffstat:
Mchrome/content/zotero/bindings/styled-textbox.xml | 64++++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 38 insertions(+), 26 deletions(-)

diff --git a/chrome/content/zotero/bindings/styled-textbox.xml b/chrome/content/zotero/bindings/styled-textbox.xml @@ -56,8 +56,6 @@ "</strong>":"\\b0 ", "<b>":"\\b ", "</b>":"\\b0 ", - "<u>":"\\ul ", - "</u>":"\\ul0 ", "<br />":"\x0B", "<sup>":"\\super ", "</sup>":"\\super0 ", @@ -68,6 +66,19 @@ '<span class="tab">&nbsp;</span>':"\t" }; + this._rtfRexMap = [ + ["<span style=\"font-variant:small-caps;\">", + /small-caps/, + "\\scaps ", + "\\scaps0 " + ], + ["<span style=\"text-decoration:underline;\">", + /underline/, + "\\ul ", + "\\ul0 " + ] + ] + this._constructed = true; if (this._loadOnConstruct) { @@ -164,28 +175,29 @@ output = output.replace(needle, this._rtfMap[needle], "g"); } - // Preserve small caps - var l = output.split(/(<\/?span[^>]*>)/); - var current_level = 0; - var tag_level = []; - for (var pos=1; pos<l.length; pos+=2) { - var tag = l[pos]; - if (tag[1] == "/") { - current_level--; - if (current_level == tag_level[tag_level.length-1]) { - tag_level.pop(); - l[pos] = "\\scaps0 "; - } - } else { - if (l[pos].match(/small-caps/)) { - l[pos] = "\\scaps "; - tag_level.push(current_level); - } - current_level++; + // Preserve small caps and underlining + for each (var tagspec in this._rtfRexMap){ + var l = output.split(/(<\/?span[^>]*>)/); + var current_level = 0; + var tag_level = []; + for (var pos=1; pos<l.length; pos+=2) { + var tag = l[pos]; + if (tag[1] == "/") { + current_level--; + if (current_level == tag_level[tag_level.length-1]) { + tag_level.pop(); + l[pos] = tagspec[3]; + } + } else { + if (l[pos].match(tagspec[1])) { + l[pos] = tagspec[2]; + tag_level.push(current_level); + } + current_level++; + }; }; + output = l.join(""); }; - output = l.join(""); - output = output.replace("<p>", "", "g"); output = output.replace("</p>", "\\par ", "g"); output = output.replace(/<\/?div[^>]*>/g, ""); @@ -258,10 +270,10 @@ html = html.replace(this._rtfMap[needle], needle, "g"); } } - - html = html.replace("\\scaps ", "<span style=\"font-variant:small-caps\">", "g"); - html = html.replace("\\scaps0 ", "</span>", "g"); - + for each (var tagspec in this._rtfRexMap){ + html = html.replace(tagspec[2], tagspec[0], "g"); + html = html.replace(tagspec[3], "</span>", "g"); + } html = '<div style="'+bodyStyle+'"><p>'+html.replace("\par ", "</p><p>")+"</p></div>"; Zotero.debug("setting content to "+html); }