the genLang project aims at replacing all l10ntools with more modern versions, based on C++ and lex. The current extract works basically as a standalone "find" over the source tree. genLang can use that, but also a more efficient way, by having translation-worthy files declared in the makefile stubs. genLang itself is a C++ framework, where each file type is defined as a class, making it easy to add new file types. genLang can easily be adopted to transform the help files into e.g. mediawiki format, and later merge a url back into the code. The project was first developed (solely by the author) in a non published branch of OO. This branch was never merged but deleted and therefore never published. The files have been adapted to the LO build system and setup. The primary commit is just to raise awareness, that this is being developed. The following commit, will update the source code to LO standard. Before replacing the old modules a dedicated review will be asked for. Change-Id: I4504992474333c476c179903f822bfaf1441cca9 Reviewed-on: https://gerrit.libreoffice.org/22819 Reviewed-by: jan iversen <jani@documentfoundation.org> Tested-by: jan iversen <jani@documentfoundation.org>
98 lines
3.0 KiB
C++
98 lines
3.0 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
|
|
#include "gConvDB.hxx"
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
************************** G C O N D B . C X X **************************
|
|
*****************************************************************************
|
|
* This includes the c code generated by flex
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
/************ I N T E R F A C E I M P L E M E N T A T I O N ************/
|
|
convert_db::convert_db(l10nMem& crMemory) : convert_gen_impl(crMemory) {}
|
|
convert_db::~convert_db() {}
|
|
|
|
|
|
|
|
/********************** I M P L E M E N T A T I O N **********************/
|
|
void convert_db::execute()
|
|
{
|
|
std::string newKey;
|
|
int i;
|
|
|
|
|
|
msSourceBuffer += '\n';
|
|
miSize = msSourceBuffer.size() -1;
|
|
miLineNo = 0;
|
|
|
|
while (collectLine())
|
|
{
|
|
newKey = msFields[4];
|
|
if (msFields[5].size())
|
|
newKey += "." + msFields[5];
|
|
if (msFields[3].size())
|
|
newKey += "." + msFields[3];
|
|
|
|
for (; (i = msFields[1].find('\\')) != (int)std::string::npos;)
|
|
msFields[1][i] = '/';
|
|
|
|
// handle en-US or lang
|
|
mcMemory.loadEntryKey(miLineNo, msFields[1], newKey, msFields[10], msFields[10], false);
|
|
}
|
|
}
|
|
|
|
|
|
/********************** I M P L E M E N T A T I O N **********************/
|
|
bool convert_db::collectLine()
|
|
{
|
|
int i, iStart;
|
|
bool bLineEnd;
|
|
|
|
++miLineNo;
|
|
|
|
for (i = 0; i < NUMFIELD; ++i)
|
|
msFields[i].clear();
|
|
|
|
if (miSourceReadIndex >= miSize)
|
|
return false;
|
|
|
|
for (i = 0, bLineEnd = false, iStart = miSourceReadIndex; !bLineEnd; ++miSourceReadIndex)
|
|
{
|
|
if (msSourceBuffer[miSourceReadIndex] == '\r' ||
|
|
msSourceBuffer[miSourceReadIndex] == '\n' ||
|
|
miSourceReadIndex == miSize)
|
|
bLineEnd = true;
|
|
if (msSourceBuffer[miSourceReadIndex] == '\t' || bLineEnd)
|
|
{
|
|
if (i >= NUMFIELD)
|
|
{
|
|
l10nMem::showError((char*)"TOO many fields", miLineNo);
|
|
}
|
|
msFields[i++] = msSourceBuffer.substr(iStart, miSourceReadIndex - iStart);
|
|
iStart = miSourceReadIndex +1;
|
|
}
|
|
}
|
|
return true;
|
|
}
|