Import Ruty
This commit is contained in:
+118
@@ -0,0 +1,118 @@
|
||||
var Utils = require("./rtf-utils"),
|
||||
Align = require("./Align"),
|
||||
Fonts = require("./fonts");
|
||||
|
||||
module.exports = Format = function(){
|
||||
this.underline=false;
|
||||
this.bold=false;
|
||||
this.italic=false;
|
||||
this.strike=false;
|
||||
|
||||
this.superScript=false;
|
||||
this.subScript=false;
|
||||
|
||||
this.makeParagraph=false;
|
||||
|
||||
this.align = "";
|
||||
|
||||
this.leftIndent=0;
|
||||
this.rightIndent=0;
|
||||
|
||||
this.font = Fonts.ARIAL;
|
||||
this.fontSize=0;
|
||||
//this.color = rgb;
|
||||
//this.backgroundColor = rgb;
|
||||
|
||||
this.colorPos = -1;
|
||||
this.backgroundColorPos= -1;
|
||||
this.fontPos = -1;
|
||||
|
||||
//if defined, this element will become a link to this url
|
||||
//TODO: not implemented
|
||||
//this.url;
|
||||
};
|
||||
|
||||
//because JS doesn't have .equalsTo
|
||||
function getColorPosition(table, find){
|
||||
if(find !== undefined && find instanceof RGB){
|
||||
table.forEach(function(color, index){
|
||||
if(color.red === find.red &&
|
||||
color.green === find.green &&
|
||||
color.blue === find.blue){
|
||||
return index;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
Format.prototype.updateTables = function(colorTable, fontTable){
|
||||
this.fontPos = fontTable.indexOf(this.font);
|
||||
this.colorPos = getColorPosition(colorTable, this.color);
|
||||
this.backgroundColorPos = getColorPosition(colorTable, this.backgroundColor);
|
||||
|
||||
//if a a font was defined, and it's not in a table, add it in!
|
||||
if(this.fontPos < 0 && this.font !== undefined && this.font.length > 0) {
|
||||
fontTable.push(this.font);
|
||||
this.fontPos = fontTable.length-1;
|
||||
}
|
||||
//if a color was defined, and it's not in the table, add it as well
|
||||
if(this.colorPos < 0 && this.color !== undefined) {
|
||||
colorTable.push(this.color);
|
||||
this.colorPos = colorTable.length;
|
||||
}
|
||||
//background colors use the same table as color
|
||||
if(this.backgroundColorPos < 0 && this.backgroundColor !== undefined) {
|
||||
colorTable.push(this.backgroundColor);
|
||||
this.backgroundColorPos = colorTable.length;
|
||||
}
|
||||
};
|
||||
|
||||
//some RTF elements require that they are wrapped, closed by a trailing 0 and must have a spacebefore the text.
|
||||
function wrap(text, rtfwrapper){
|
||||
return rtfwrapper + " " + text + rtfwrapper + "0";
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies a format to some text
|
||||
*/
|
||||
Format.prototype.formatText = function(text, colorTable, fontTable, safeText){
|
||||
this.updateTables(colorTable, fontTable);
|
||||
var rtf = "{";
|
||||
if(this.makeParagraph) rtf+="\\pard";
|
||||
|
||||
if(this.fontPos !== undefined && this.fontPos>=0) rtf+="\\f" + this.fontPos.toString();
|
||||
//Add one because color 0 is null
|
||||
if(this.backgroundColorPos !== undefined && this.backgroundColorPos >= 0) rtf+="\\cb" + (this.backgroundColorPos+1).toString();
|
||||
//Add one because color 0 is null
|
||||
if(this.colorPos !== undefined && this.colorPos>=0) rtf+="\\cf" + (this.colorPos).toString();
|
||||
if(this.fontSize >0) rtf += "\\fs" + (this.fontSize*2).toString();
|
||||
if(this.align.length > 0) rtf += align;
|
||||
if(this.leftIndent>0) rtf += "\\li" + (this.leftIndent*20).toString();
|
||||
if(this.rightIndent>0) rtf += "\\ri" + this.rightIndent.toString();
|
||||
|
||||
//we don't escape text if there are other elements in it, so set a flag
|
||||
var content = "";
|
||||
if(safeText === undefined || safeText){
|
||||
content += Utils.getRTFSafeText(text);
|
||||
}else{
|
||||
content += text;
|
||||
}
|
||||
|
||||
if(this.bold) content = wrap(content, "\\b") ;
|
||||
if(this.italic) content = wrap(content, "\\i");
|
||||
if(this.underline) content = wrap(content, "\\ul");
|
||||
if(this.strike) content = wrap(content, "\\strike");
|
||||
if(this.subScript) content = wrap(content, "\\sub");
|
||||
if(this.superScript) content = wrap(content, "\\super");
|
||||
rtf += content;
|
||||
|
||||
//close paragraph
|
||||
if(this.makeParagraph) rtf += "\\par";
|
||||
|
||||
//close doc
|
||||
rtf+="}";
|
||||
|
||||
return rtf;
|
||||
};
|
||||
Reference in New Issue
Block a user