X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpretor/preprocessor/faust-0.9.47mr3/compiler/documentator/doc_lang.cpp diff --git a/interpretor/preprocessor/faust-0.9.47mr3/compiler/documentator/doc_lang.cpp b/interpretor/preprocessor/faust-0.9.47mr3/compiler/documentator/doc_lang.cpp deleted file mode 100644 index 41c8ff9..0000000 --- a/interpretor/preprocessor/faust-0.9.47mr3/compiler/documentator/doc_lang.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/************************************************************************ - ************************************************************************ - FAUST compiler - Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - ************************************************************************ - ************************************************************************/ - - -#include -#include -#include -#include -#include -#include -#include - -#include "doc_lang.hh" -#include "doc_notice.hh" -#include "doc_autodoc.hh" -#include "doc_metadatas.hh" -#include "lateq.hh" -#include "enrobage.hh" -#include "compatibility.hh" - - - -extern map gDocNoticeStringMap; -extern set gDocNoticeKeySet; - -extern map gDocAutodocStringMap; -extern set gDocAutodocKeySet; - -extern map gDocMathStringMap; -extern set gDocMathKeySet; - -extern map gDocMetadatasStringMap; -extern set gDocMetadatasKeySet; - -static const string gDocTextsDefaultFile = "mathdoctexts-default.txt"; - -static void importDocStrings(const string& filename); -static void getKey(string& s, string& key, size_t& pt1); -static void getText(string& s, size_t& pt1, string& text); -static void storePair(const string& key, const string& text); - -static void printStringMapContent(map& map, const string& name); - -static istream* openArchFile (const string& filename); -static void getCurrentDir(); -static int cholddir(); - -static string gCurrentDir; ///< Room to save current directory name. - - - - -/***************************************************************************** - Public functions - *****************************************************************************/ - - -void loadTranslationFile(const string& lang) -{ - initDocMath(); - initDocNotice(); - initDocAutodoc(); - initDocMetadatas(); - - /** First ensure that the default file is loaded a least. */ - importDocStrings(gDocTextsDefaultFile); - - /** Then try and load the target file. */ - if ( ! lang.empty() ) { - importDocStrings( "mathdoctexts-" + lang + ".txt" ); - } -} - - - -/***************************************************************************** - Static functions - *****************************************************************************/ - - - -/** - * @brief Feed the content of doc texts maps from a file. - * - * This mecchanism allows to load different files for translation. - * - * "mathdoctexts" files must have been formatted as follows : - * - a line beginning by ':' immediately declares a keyword, - * - a line beginning by '"' contains text until the last '"', - * - text can directly follow a keyword, if separated by one or - * many separator characters (space or tab). - * - a direct line break between two double quoted strings - * will insert a '\n' line break in the resulting notice string. - */ -static void importDocStrings(const string& filename) -{ - string s; - string key, text; - istream* file = openArchFile(filename); - - while ( getline(*file, s) ) { - size_t pt1; // Text pointer. - - /* The first character determines whether will follow a key or a text. */ - switch (s[0]) { - case ':': - text = ""; - getKey(s, key, pt1); - if (pt1==string::npos) continue; - break; - case '\"': - pt1 = 0; - break; - default: - continue; - } - getText(s, pt1, text); - storePair(key, text); - } - printStringMapContent(gDocNoticeStringMap, "gDocNoticeStringMap"); - printStringMapContent(gDocAutodocStringMap, "gDocAutodocStringMap"); - printStringMapContent(gDocMathStringMap, "gDocMathStringMap"); - printStringMapContent(gDocMetadatasStringMap, "gDocMetadatasStringMap"); -} - - -static void getKey(string& s, string& key, size_t& pt1) -{ - /* Initialisation. */ - key = ""; - string separators = " \t"; - size_t pk1 = 1; - size_t pk2 = s.find_first_of(separators); - - /* Immediate '\n' after keyword case. */ - if (pk2==string::npos) pk2 = s.size(); - - /* Capture and check the keyword. */ - key = s.substr(pk1, pk2-1); - - /* Prepare text capture. */ - pt1 = s.find_first_of("\"", pk2); -} - - -static void getText(string& s, size_t& pt1, string& text) -{ - /* Capture the text on the current line. */ - size_t pt2; - pt2 = s.find_last_not_of("\""); - if (pt2!=string::npos) { - if (text.size() > 0) text += "\n"; // Handle line breaks. - text += s.substr(pt1+1, pt2-pt1); - } -} - - -static void storePair(const string& key, const string& text) -{ - /* Store the current pair. */ - if(!key.empty() && !text.empty()) { - - if (gDocNoticeKeySet.find(key) != gDocNoticeKeySet.end()) { - gDocNoticeStringMap[key] = text; - } - else if (gDocAutodocKeySet.find(key) != gDocAutodocKeySet.end()) { - gDocAutodocStringMap[key] = text; - } - else if (gDocMathKeySet.find(key) != gDocMathKeySet.end()) { - gDocMathStringMap[key] = text; - } - else if (gDocMetadatasKeySet.find(key) != gDocMetadatasKeySet.end()) { - gDocMetadatasStringMap[key] = text; - } - else { - cerr << "Documentator : importDocStings : " << "warning : unknown key \"" << key << "\"" << endl; - } - //cerr << "gDocNoticeStringMap[\"" << key << "\"] = \"" << gDocNoticeStringMap[key] << "\"" << endl; - } -} - - -/** - * Simple trace function. - */ -static void printStringMapContent(map& m, const string& name) { - bool trace = false; - if(trace) { - cout << name << ".size() = " << m.size() << endl; - map::iterator it; - int i = 1; - for(it = m.begin(); it!=m.end(); ++it) - cout << i++ << ".\t" << name << "[" << it->first << "] \t= '" << it->second << "'" << endl; - } -} - - - - -//------------------------ file managment ------------------------- - - -/** - * Open architecture file. - */ -static istream* openArchFile (const string& filename) -{ - istream* file; - getCurrentDir(); // Save the current directory. - if ( (file = open_arch_stream(filename.c_str())) ) { - //cerr << "Documentator : openArchFile : Opening '" << filename << "'" << endl; - } else { - cerr << "ERROR : can't open architecture file " << filename << endl; - exit(1); - } - cholddir(); // Return to current directory. - return file; -} - - -/** - * Switch back to the previously stored current directory - */ -static int cholddir () -{ - if (chdir(gCurrentDir.c_str()) == 0) { - return 0; - } else { - perror("cholddir"); - exit(errno); - } -} - - -/** - * Get current directory and store it in gCurrentDir. - */ -static void getCurrentDir () -{ - char buffer[FAUST_PATH_MAX]; - gCurrentDir = getcwd (buffer, FAUST_PATH_MAX); -} - -