tweb-i2p/src/scripts/format_jsons.js
morethanwords 34546d49ee MTProto schema converter
Types for methods
2020-09-17 22:33:23 +03:00

208 lines
5.5 KiB
JavaScript

let emoji = require('./in/emoji_pretty.json');
//let countries = require('./countries_pretty.json');
let countries = require('fs').readFileSync('./in/countries.dat').toString();
//console.log(countries);
//console.log(emoji, countries);
let formatted = emoji.filter(e => e.has_img_apple);
function encodeEmoji(emojiText) {
const codepoints = toCodePoints(removeVS16s(emojiText)).join('-');
return codepoints;
}
const vs16RegExp = /\uFE0F/g;
// avoid using a string literal like '\u200D' here because minifiers expand it inline
const zeroWidthJoiner = String.fromCharCode(0x200d);
const removeVS16s = (rawEmoji) => (rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji);
function toCodePoints(unicodeSurrogates) {
const points = [];
let char = 0;
let previous = 0;
let i = 0;
while(i < unicodeSurrogates.length) {
char = unicodeSurrogates.charCodeAt(i++);
if(previous) {
points.push((0x10000 + ((previous - 0xd800) << 10) + (char - 0xdc00)).toString(16));
previous = 0;
} else if (char > 0xd800 && char <= 0xdbff) {
previous = char;
} else {
points.push(char.toString(16));
}
}
if(points.length && points[0].length == 2) {
points[0] = '00' + points[0];
}
return points;
}
/* formatted = formatted.map(e => {
let {unified, name, short_names, category, sheet_x, sheet_y} = e;
return {
unified,
//name,
//short_names,
category,
sheet_x,
sheet_y
};
});
require('fs').writeFileSync('./emoji.json', JSON.stringify(formatted)); */
if(false) {
let obj = {};
formatted.forEach(e => {
let {unified, name, short_names, category, sheet_x, sheet_y, sort_order} = e;
let emoji = unified.split('-')
.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');
obj[/* unified */emoji] = {
//unified,
//name,
//short_names,
category,
sheet_x,
sheet_y,
sort_order
};
});
require('fs').writeFileSync('./out/emoji.json', JSON.stringify(obj));
}
{
let categories = {
"Smileys & Emotion": 1
, "People & Body": 1
, "Animals & Nature": 2
, "Food & Drink": 3
, "Travel & Places": 4
, "Activities": 5
, "Objects": 6
, "Symbols": 6
, "Flags": 7
, "Skin Tones": 8
};
let concatCategories = [['Objects', 'Symbols'], ['Smileys & Emotion', 'People & Body']];
let maxIndexes = {};
let maxObjectsIndex = -1;
formatted.forEach(e => {
if(concatCategories.findIndex(c => c[0] == e.category) === -1) return;
if(!maxIndexes.hasOwnProperty(e.category)) maxIndexes[e.category] = 0;
if(e.sort_order > maxIndexes[e.category]) {
maxIndexes[e.category] = e.sort_order;
}
});
formatted.forEach(e => {
let concatDetails = concatCategories.find(c => c[1] == e.category);
if(!concatDetails) return;
e.sort_order += maxIndexes[concatDetails[0]];
});
formatted.forEach(e => {
if(e.skin_variations) {
for(let i in e.skin_variations) {
formatted.push(e.skin_variations[i]);
}
}
});
let obj = {};
if(false/* || true */) formatted.forEach(e => {
let {unified, name, short_names, category, sheet_x, sheet_y, sort_order} = e;
let emoji = unified/* .replace(/-FE0F/gi, '') */.split('-')
.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');
//emoji = emoji.replace(/[\ufe0f\u200d]/g, '');
let c = categories[category] === undefined ? 9 : categories[category];
//obj[emoji] = '' + c + sort_order;
//obj[emoji] = +('' + (c * 1000 + sort_order)).replace(/0+/g, '0').replace(/^(\d)0(\d)/g, '$1$2');
obj[emoji] = e.sort_order !== undefined ? +('' + c + sort_order) : 0;
});
if(true) formatted.forEach(e => {
let {unified, name, short_names, category, sheet_x, sheet_y, sort_order} = e;
let emoji = unified.split('-')
.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');
emoji = encodeEmoji(emoji);
//emoji = emoji.replace(/(-fe0f|fe0f)/g, '');
let c = categories[category] === undefined ? 9 : categories[category];
//obj[emoji] = '' + c + sort_order;
//obj[emoji] = +('' + (c * 1000 + sort_order)).replace(/0+/g, '0').replace(/^(\d)0(\d)/g, '$1$2');
obj[emoji] = e.sort_order !== undefined ? +('' + c + sort_order) : 0;
});
console.log(obj);
require('fs').writeFileSync('./out/emoji.json', JSON.stringify(obj));
}
/* {
let obj = {};
formatted.forEach(e => {
let {unified, name, short_names, category, sheet_x, sheet_y} = e;
let categories = ["Smileys & People", "Animals & Nature", "Food & Drink",
"Travel & Places", "Activities", "Objects", "Symbols", "Flags", "Skin Tones"];
let categoryId = categories.findIndex(c => c == category);
if(categoryId === -1) throw new Error(category);
obj[unified] = [
sheet_x,
sheet_y,
categoryId
];
});
require('fs').writeFileSync('./emoji.json', JSON.stringify(obj));
} */
{
let arr = [];
/* countries.forEach(e => {
let {name, code, phoneCode} = e;
arr.push([name, code, phoneCode]);
}); */
const lines = countries.split('\n');
const data2 = [];
lines.forEach(x => {
if(!x.trim()) return;
const split = x.split(';');
const item = {
phoneCode: split[0],
code: split[1],
name: split[2],
pattern: split[3],
//count: Number(split[4]),
emoji: split[5]
};
arr.push(item);
//console.log(item);
});
require('fs').writeFileSync('./out/countries.json', JSON.stringify(arr));
}