I have a builded a text editor in javascript that takes keyboard-written-text as an input, and outputs the same paragraph, but with each word styled accordingly to how it was written. My text editor exports a CSV file, where each row is a word, and its specifc styling values covering: font size, word tracking, spacing between two words, and the color of the word.
Now I want to import this csv file into InDesign using the basil.js library, so that I can create a text box with a paragraph of the words and the stylings located in the csv file.
The csv file can be seen here:
word,spacing,size,tracking,color
"Hello,",0,16,0,90
this,70,16,0.22,90
is,0,16,7,0
a,0,16,0,90
test,0,24,3.98,90
to,0,16,5.06,90
show,0,16,-1.56,90
what,42.84,16,-0.6,90
i,0,16,0,90
mean,0,16,-0.79,90
I’ve managed to import the csv, create a paragraph with each word, and make the font-size styling work for each work. But I can’t make the tracking property work. Also I dont really have an Idea how to create increasd space between two words in a paragraph through basil.js (In the texteditor it used left-padding css). Also I dont know how to change the color of each word.
Is this possible with basil.js?
My current code looks like this:
#includepath "~/Documents/;%USERPROFILE%Documents";
#include "basiljs/bundle/basil.js";
function draw(){
b.clear(b.doc());
//import csv file
var data = b.CSV.decode( b.loadString("mycsv.csv"));
//paragraph placeholder
var paragraph = "";
//parse to right data type,
for (var i = 0; i < data.length; i++) {
data[i].spacing = parseInt(data[i].spacing);
data[i].size = parseInt(data[i].size);
data[i].tracking = parseInt(data[i].tracking);
data[i].color = parseInt(data[i].color);
// data[i].word is already a string at it should
//Add each word in the csv row to create a paragraph
paragraph += data[i].word + " ";
};
//create a textframe element for the paragraph
var tf = b.text(paragraph, 36, 36, 500, b.height);
var myWords = b.words(tf);
// iterate through each word and apply the specific styling for the
specific word.
for(var i = 0; i < myWords.length; i++){
var size_ = data[i].size; // font size
var tracking_ = data[i].tracking; //word tracking
var color_ = data[i].color; // font color
var spacing_ = data[i].spacing;
// this one works
myWords[i].pointSize = size_;
//I'ld like to change tracking for each word - but this dosnt work
myWords[i].tracking = tracking_;
//myWords[i].color = rgb(color_); - How can I apply a specific color to a specific word in the paragraph
// myWords[i].word_spacing = - I would like to increase the spacing between specific pairs of words. How can this be done?
}
}
b.go();