ngx-i18nsupport-lib
Version:
A Typescript library to work with Angular generated i18n files (xliff, xmb)
142 lines • 6.71 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var parsed_message_part_1 = require("./parsed-message-part");
var icu_message_tokenizer_1 = require("./icu-message-tokenizer");
var icu_message_1 = require("./icu-message");
var util_1 = require("util");
/**
* Created by martin on 02.06.2017.
* A message part consisting of an icu message.
* There can only be one icu message in a parsed message.
* Syntax of ICU message is '{' <keyname> ',' 'select'|'plural' ',' (<category> '{' text '}')+ '}'
*/
var ParsedMessagePartICUMessage = /** @class */ (function (_super) {
__extends(ParsedMessagePartICUMessage, _super);
function ParsedMessagePartICUMessage(icuMessageText, _parser) {
var _this = _super.call(this, parsed_message_part_1.ParsedMessagePartType.ICU_MESSAGE) || this;
_this._parser = _parser;
if (icuMessageText) {
_this.parseICUMessage(icuMessageText);
}
return _this;
}
/**
* Test wether text might be an ICU message.
* Should at least start with something like '{<name>, select, ..' or '{<name>, plural, ...'
* @param {string} icuMessageText
* @return {boolean}
*/
ParsedMessagePartICUMessage.looksLikeICUMessage = function (icuMessageText) {
var part = new ParsedMessagePartICUMessage(null, null);
return part.looksLikeICUMessage(icuMessageText);
};
ParsedMessagePartICUMessage.prototype.asDisplayString = function (format) {
return '<ICU-Message/>';
};
/**
* return the parsed message.
* @return {ICUMessage}
*/
ParsedMessagePartICUMessage.prototype.getICUMessage = function () {
return this._message;
};
/**
* Parse the message.
* @param text message text to parse
* @throws an error if the syntax is not ok in any way.
*/
ParsedMessagePartICUMessage.prototype.parseICUMessage = function (text) {
// console.log('message ', text);
// const tokens = new ICUMessageTokenizer().tokenize(text);
// tokens.forEach((tok) => {
// console.log('Token', tok.type, tok.value);
// });
this._messageText = text;
this._tokenizer = new icu_message_tokenizer_1.ICUMessageTokenizer();
this._tokenizer.input(text);
this.expectNext(icu_message_tokenizer_1.CURLY_BRACE_OPEN);
this.expectNext(icu_message_tokenizer_1.TEXT); // varname, not used currently, ng always used VAR_PLURAL or VAR_SELECT
this.expectNext(icu_message_tokenizer_1.COMMA);
var token = this._tokenizer.next();
if (token.type === icu_message_tokenizer_1.PLURAL) {
this._message = new icu_message_1.ICUMessage(this._parser, true);
}
else if (token.type === icu_message_tokenizer_1.SELECT) {
this._message = new icu_message_1.ICUMessage(this._parser, false);
}
this.expectNext(icu_message_tokenizer_1.COMMA);
token = this._tokenizer.peek();
while (token.type !== icu_message_tokenizer_1.CURLY_BRACE_CLOSE) {
var category = this.expectNext(icu_message_tokenizer_1.TEXT).value.trim();
this.expectNext(icu_message_tokenizer_1.CURLY_BRACE_OPEN);
var message = this.expectNext(icu_message_tokenizer_1.TEXT).value;
this._message.addCategory(category, this.parseNativeSubMessage(message));
this.expectNext(icu_message_tokenizer_1.CURLY_BRACE_CLOSE);
token = this._tokenizer.peek();
}
this.expectNext(icu_message_tokenizer_1.CURLY_BRACE_CLOSE);
this.expectNext('EOF');
};
/**
* Parse the message to check, wether it might be an ICU message.
* Should at least start with something like '{<name>, select, ..' or '{<name>, plural, ...'
* @param text message text to parse
*/
ParsedMessagePartICUMessage.prototype.looksLikeICUMessage = function (text) {
// console.log('message ', text);
// const tokens = new ICUMessageTokenizer().tokenize(text);
// tokens.forEach((tok) => {
// console.log('Token', tok.type, tok.value);
// });
this._tokenizer = new icu_message_tokenizer_1.ICUMessageTokenizer();
this._tokenizer.input(text);
try {
this.expectNext(icu_message_tokenizer_1.CURLY_BRACE_OPEN);
this.expectNext(icu_message_tokenizer_1.TEXT); // varname, not used currently, ng always used VAR_PLURAL or VAR_SELECT
this.expectNext(icu_message_tokenizer_1.COMMA);
var token = this._tokenizer.next();
if (token.type !== icu_message_tokenizer_1.PLURAL && token.type !== icu_message_tokenizer_1.SELECT) {
return false;
}
this.expectNext(icu_message_tokenizer_1.COMMA);
return true;
}
catch (error) {
return false;
}
};
/**
* Read next token and expect, that it is of the given type.
* @param tokentype expected type.
* @return {ICUToken} Token
* @throws error, if next token has wrong type.
*/
ParsedMessagePartICUMessage.prototype.expectNext = function (tokentype) {
var token = this._tokenizer.next();
if (token.type !== tokentype) {
throw new Error(util_1.format('Error parsing ICU Message: expected %s, found %s (%s) (message %s)', tokentype, token.type, token.value, this._messageText));
}
return token;
};
/**
* Parse XML text to normalozed message.
* @param message message in format dependent xml syntax.
* @return {INormalizedMessage}
*/
ParsedMessagePartICUMessage.prototype.parseNativeSubMessage = function (message) {
return this._parser.createNormalizedMessageFromXMLString(message, null);
};
return ParsedMessagePartICUMessage;
}(parsed_message_part_1.ParsedMessagePart));
exports.ParsedMessagePartICUMessage = ParsedMessagePartICUMessage;
//# sourceMappingURL=S:/experimente/ngx-i18nsupport-lib/src/impl/parsed-message-part-icu-message.js.map