mirror of
				https://github.com/notepad-plus-plus/notepad-plus-plus.git
				synced 2025-11-04 13:34:00 +01:00 
			
		
		
		
	Update with https://www.scintilla.org/scintilla521.zip https://www.scintilla.org/lexilla515.zip - fix setting to bring Scintilla::PositionCR from ScintillaStructures.h inline with Sci_Position.h Sci_PositionCR - add workaround to enable lexer for searchResult commented out SCI_SETILEXER call on searchResult to get one result which is correctly handled by the lexer, added comment about the current problem with property @MarkingsStruct which seems to disappear after call to SCI_SETILEXER or CreateLexer - corrected usage of ObjC lexer - removed unnecessary filter stuff - use own sections for scintilla and lexilla build targets and allow parallel builds - as libscilex is no longer existing, changed to libscintilla - adapt makefiles and cmake - use VS2019 - started simple changes for createlexer adaptations, nullpointercheck missing on return of lexer name from deprecated LexerNameFromID -> undefined behaviour - movement from id -> lexer name, mostly done via LexerNameFromID + switching off corresponding compiler warning - changed to SCI_SETILEXER from SCI_SETLEXER, SCI_SETLEXERLANGUAGE needs to be corrected, see Scintilla5Migration.html - just commented out: SCI_LOADLEXERLIBRARY Fix #10504, close #11419
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Scintilla source code edit control
 | 
						|
// Converter.h - Encapsulation of iconv
 | 
						|
// Copyright 2004 by Neil Hodgson <neilh@scintilla.org>
 | 
						|
// The License.txt file describes the conditions under which this software may be distributed.
 | 
						|
 | 
						|
#ifndef CONVERTER_H
 | 
						|
#define CONVERTER_H
 | 
						|
 | 
						|
namespace Scintilla {
 | 
						|
 | 
						|
const GIConv iconvhBad = (GIConv)(-1);
 | 
						|
const gsize sizeFailure = static_cast<gsize>(-1);
 | 
						|
/**
 | 
						|
 * Encapsulate g_iconv safely.
 | 
						|
 */
 | 
						|
class Converter {
 | 
						|
	GIConv iconvh = iconvhBad;
 | 
						|
	void OpenHandle(const char *fullDestination, const char *charSetSource) noexcept {
 | 
						|
		iconvh = g_iconv_open(fullDestination, charSetSource);
 | 
						|
	}
 | 
						|
	bool Succeeded() const noexcept {
 | 
						|
		return iconvh != iconvhBad;
 | 
						|
	}
 | 
						|
public:
 | 
						|
	Converter() noexcept = default;
 | 
						|
	Converter(const char *charSetDestination, const char *charSetSource, bool transliterations) {
 | 
						|
		Open(charSetDestination, charSetSource, transliterations);
 | 
						|
	}
 | 
						|
	// Deleted so Converter objects can not be copied.
 | 
						|
	Converter(const Converter &) = delete;
 | 
						|
	Converter(Converter &&) = delete;
 | 
						|
	Converter &operator=(const Converter &) = delete;
 | 
						|
	Converter &operator=(Converter &&) = delete;
 | 
						|
	~Converter() {
 | 
						|
		Close();
 | 
						|
	}
 | 
						|
	operator bool() const noexcept {
 | 
						|
		return Succeeded();
 | 
						|
	}
 | 
						|
	void Open(const char *charSetDestination, const char *charSetSource, bool transliterations) {
 | 
						|
		Close();
 | 
						|
		if (*charSetSource) {
 | 
						|
			// Try allowing approximate transliterations
 | 
						|
			if (transliterations) {
 | 
						|
				std::string fullDest(charSetDestination);
 | 
						|
				fullDest.append("//TRANSLIT");
 | 
						|
				OpenHandle(fullDest.c_str(), charSetSource);
 | 
						|
			}
 | 
						|
			if (!Succeeded()) {
 | 
						|
				// Transliterations failed so try basic name
 | 
						|
				OpenHandle(charSetDestination, charSetSource);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	void Close() noexcept {
 | 
						|
		if (Succeeded()) {
 | 
						|
			g_iconv_close(iconvh);
 | 
						|
			iconvh = iconvhBad;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	gsize Convert(char **src, gsize *srcleft, char **dst, gsize *dstleft) const noexcept {
 | 
						|
		if (!Succeeded()) {
 | 
						|
			return sizeFailure;
 | 
						|
		} else {
 | 
						|
			return g_iconv(iconvh, src, srcleft, dst, dstleft);
 | 
						|
		}
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |