You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
6.9 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD>: <20><>ʽת<CABD><D7AA><EFBFBD><EFBFBD>
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
// ת<><D7AA>GeoMap3.2<EFBFBD>ĵķ<EFBFBD><EFBFBD>ſ<EFBFBD><EFBFBD>ļ<EFBFBD>
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2009-8-04
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "GeoMapDataType.h"
#include ".\symbolbaselib.h"
namespace NFormatReader
{
namespace NGeoMapReader
{
//*****************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD>(Geomap 3.2 slf)
//*****************************************
#pragma pack(1)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct GMShapeSymHead
{
int type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int t2i1; // 0x44000000
int t3i1; // 0x00000000
char codeType[14]; // <20><><EFBFBD><EFBFBD><EBB7BD>(SY##.#.#.###)
int codeNum; // <20><><EFBFBD><EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(5)
int code1; // 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>̶<EFBFBD>ΪSY=ʯ<>͵<EFBFBD><CDB5><EFBFBD>)
int code2; // 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(2)
int code3; // 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(1)
int code4; // 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(1)
int code5; // 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(3)(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
char id[20]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char name[30]; // <20><><EFBFBD><EFBFBD>
};
// Geomap <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct GMShapeSymSort
{
int sort; // <20><><EFBFBD><EFBFBD>
int t1i1; // 0x01000000
char code[21]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char name[31]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//Geomap<61><70><EFBFBD>ſ<EFBFBD><C5BF>е<EFBFBD>0<EFBFBD><30>ͼԪ(<28><><EFBFBD><EFBFBD>)
struct GMShapeSymText
{
short right; // <20><>
short bottom; // <20><>
short left; // <20><>
short top; // <20><>
::byte t1c1; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>(<28><>Ч)
::byte selectPen; // <20>Ƿ<EFBFBD>ѡ<EFBFBD>񻭱<EFBFBD>(1)
GColor penColor; // ǰ<><C7B0><EFBFBD><EFBFBD>ɫ
::byte penWidth; // <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
::byte selectBrush; // <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ(0)
GColor brushColor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
int t2i1;
::byte colorFlag; // <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>滻(1:ǰ<><C7B0>,2:<3A><><EFBFBD><EFBFBD>,3:ǰ<><C7B0><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>)
::byte shape; // <20>Ƿ<EFBFBD>͸<EFBFBD><CDB8>
LOGFONT font; // <20><><EFBFBD><EFBFBD>
short len; // <20><><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>
char text[20]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//Geoamp<6D><70><EFBFBD>ſ<EFBFBD><C5BF>е<EFBFBD>1<EFBFBD><31>ͼԪ(ֱ<>ߣ<EFBFBD><DFA3><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>Բ<EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD>)...................................
struct GMShapeSymRect
{
short right; // <20><>
short bottom; // <20><>
short left; // <20><>
short top; // <20><>
::byte t1c1; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>(<28><>Ч)
::byte selectPen; // <20>Ƿ<EFBFBD>ѡ<EFBFBD>񻭱<EFBFBD>
GColor penColor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
::byte penWidth; // <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
::byte selectBrush; // <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ
GColor brushColor; // <20><>ˢ<EFBFBD><CBA2>ɫ
int t2i1;
::byte colorFlag; // <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>滻(1:<3A><><EFBFBD><EFBFBD>,2:<3A><>ˢ,3:<3A><><EFBFBD>ʺͻ<CABA>ˢ)
::byte shape; // <20><>״<EFBFBD><D7B4><EFBFBD><EFBFBD>(0:<3A>߶<EFBFBD>,1:<3A><>Բ,2:<3A><><EFBFBD><EFBFBD>,3:Բ<>Ǿ<EFBFBD><C7BE><EFBFBD>)
short cornorWidth; // Բ<>Ǿ<EFBFBD><C7BE>ε<EFBFBD>Բ<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>
short cornorHeight; // Բ<>Ǿ<EFBFBD><C7BE>ε<EFBFBD>Բ<EFBFBD>Ǹ߶<C7B8>
};
//Geomap<61><70><EFBFBD>ſ<EFBFBD><C5BF>е<EFBFBD>2<EFBFBD><32>ͼԪ(<28><><EFBFBD>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD>)
struct GMShapeSymPoly
{
short right; // <20><>
short bottom; // <20><>
short left; // <20><>
short top; // <20><>
::byte t1c1; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>(<28><>Ч)
::byte selectPen; // <20>Ƿ<EFBFBD>ѡ<EFBFBD>񻭱<EFBFBD>
GColor penColor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
::byte penWidth; // <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
::byte selectBrush; // <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ
GColor brushColor; // <20><>ˢ<EFBFBD><CBA2>ɫ
int t2i1;
::byte colorFlag; // <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>滻(1:<3A><><EFBFBD><EFBFBD>,2:<3A><>ˢ,3:<3A><><EFBFBD>ʺͻ<CABA>ˢ)
short nPoint; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//Geomap<61><70><EFBFBD>ſ<EFBFBD><C5BF>е<EFBFBD>3<EFBFBD><33>ͼԪ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
//(<28><>ֹ<EFBFBD>ǶȰ<C7B6>˳ʱ<CBB3><EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
struct GMShapeSymArc
{
short right; // <20><>
short bottom; // <20><>
short left; // <20><>
short top; // <20><>
::byte t1c1; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>(<28><>Ч)
::byte selectPen; // <20>Ƿ<EFBFBD>ѡ<EFBFBD>񻭱<EFBFBD>(<28><><EFBFBD><EFBFBD>ѡ<EFBFBD>񻭱ʣ<F1BBADB1><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
GColor penColor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
::byte penWidth; // <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
::byte selectBrush; // <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ(<28><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
GColor brushColor; // <20><>ˢ<EFBFBD><CBA2>ɫ
int t2i1;
::byte colorFlag; // <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>滻(1:<3A><><EFBFBD><EFBFBD>,2:<3A><>ˢ,3:<3A><><EFBFBD>ʺͻ<CABA>ˢ)
short cornorWidth; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<28><>λΪ0.1<EFBFBD><EFBFBD>)
short cornorHeight; // <20><>ʼ<EFBFBD>Ƕ<EFBFBD>(<28><>λΪ0.1<EFBFBD><EFBFBD>)
};
//Geomap<61><70><EFBFBD>ſ<EFBFBD><C5BF>е<EFBFBD>4<EFBFBD><34>ͼԪ(<28><><EFBFBD><EFBFBD>ͼԪ)
struct GMShapeSymGroup
{
short right; // <20><>
short bottom; // <20><>
short left; // <20><>
short top; // <20><>
::byte t1c1; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>(<28><>Ч)
::byte selectPen; // <20>Ƿ<EFBFBD>ѡ<EFBFBD>񻭱<EFBFBD>(<28><><EFBFBD><EFBFBD>ѡ<EFBFBD>񻭱ʣ<F1BBADB1><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
GColor penColor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
::byte penWidth; // <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
::byte selectBrush; // <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ(<28><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
GColor brushColor; // <20><>ˢ<EFBFBD><CBA2>ɫ
int t2i1;
::byte colorFlag; // <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>滻(1:<3A><><EFBFBD><EFBFBD>,2:<3A><>ˢ,3:<3A><><EFBFBD>ʺͻ<CABA>ˢ)
short nElem; // <20><><EFBFBD><EFBFBD>ͼԪ<CDBC>е<EFBFBD><D0B5><EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD>ݽṹ
struct GMShapeSymElement
{
short left; // <20><>
short top; // <20><>
short right; // <20><>
short bottom; // <20><>
::byte shape; // ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD> (0:<3A><><EFBFBD><EFBFBD>,1:<3A>߶<EFBFBD>,2:<3A><>Բ,3:<3A><><EFBFBD><EFBFBD>,4:Բ<>Ǿ<EFBFBD><C7BE><EFBFBD>,5:<3A><><EFBFBD><EFBFBD>,6:<3A><>)
::byte edge; // <20>Ƿ<EFBFBD>ѡ<EFBFBD>񻭱<EFBFBD>(<28><><EFBFBD><EFBFBD>ѡ<EFBFBD>񻭱ʣ<F1BBADB1><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
::byte fill; // <20>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ(<28><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)/<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>͸<EFBFBD><CDB8>
::byte cFlag; // <20><>ɫ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>滻(1:<3A><><EFBFBD><EFBFBD>,2:<3A><>ˢ,3:<3A><><EFBFBD>ʺͻ<CABA>ˢ)
GColor color; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
GColor bkColor; // <20><>ˢ<EFBFBD><CBA2>ɫ
short penWidth; // <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
short aWidth; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<28><>λΪ0.1<EFBFBD><EFBFBD>)/Բ<>Ǿ<EFBFBD><C7BE>ε<EFBFBD>Բ<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>
short aHeight; // <20><>ʼ<EFBFBD>Ƕ<EFBFBD>(<28><>λΪ0.1<EFBFBD><EFBFBD>)/Բ<>Ǿ<EFBFBD><C7BE>ε<EFBFBD>Բ<EFBFBD>Ǹ߶<C7B8>
short nPoint; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SPoint *vertex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LOGFONT *font; // <20><><EFBFBD><EFBFBD>
char *text; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE subType; // ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD> -------------------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GMShapeSymRect symRect; // <20><><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>Ԫ<EFBFBD><D4AA>----------------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GMShapeSymPoly symPoly; // <20><><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>Ԫ<EFBFBD><D4AA>----------------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GMShapeSymArc symArc; // <20><><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>Ԫ<EFBFBD><D4AA>----------------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GMShapeSymText symText; // <20><><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>Ԫ<EFBFBD><D4AA>----------------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GMShapeSymGroup symGroup; // <20><><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>Ԫ<EFBFBD><D4AA>----------------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
struct GMShapeSymbol
{
int id; // <20><><EFBFBD><EFBFBD>ID
GColor bkColor; // <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>ɫ
char name[50]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nSymNameLen; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>---------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nElem; // <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>
GMShapeSymElement *elems;// <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>
BYTE tmpInt1; // <20><>չ1----------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE tmpInt2; // <20><>չ2----------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE tmpInt3; // <20><>չ3----------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD>ſ<EFBFBD><C5BF><20><><EFBFBD><EFBFBD><EFBFBD>ܽṹ
struct GMSymbolLib
{
int nSymbol; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GMShapeSymbol *shapeSymbol; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ؼ<EFBFBD>
};
class CGeoMapSymbolLib : public CSymbolBaseLib
{
public:
CGeoMapSymbolLib(void);
virtual ~CGeoMapSymbolLib(void);
public:
// <20><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
static bool LoadSymbol(CString *fname=NULL);
// <20>ͷŷ<CDB7><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
static void FreeSymbol();
// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void ReadSymbol(CFile &m_File, GMShapeSymbol &symbol);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͼԪ
static void ReadElement(CFile &m_File,GMShapeSymElement *elems, int nElem);
private:
static GMShapeSymSort *sorts; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static GMShapeSymbol *symbols; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static bool loaded; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int nSymbol; // <20><><EFBFBD>ſ<EFBFBD><C5BF>еķ<D0B5><C4B7>Ÿ<EFBFBD><C5B8><EFBFBD>
static int nSort; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>GDI<44><49><EFBFBD><EFBFBD>)
bool DrawSymbol( CDC *pDC, int symID, bool useColor, GColor color, int size, CPoint posi);
private:
void convert(CPoint &pt);
void convert(CPoint *pt, int n);
int symID = 0; // <20><><EFBFBD><EFBFBD>ID
CDC *pDC = nullptr; // <20><><EFBFBD><EFBFBD>
bool useColor = false; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
GColor color; // <20>û<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ
int size = 0; // <20><><EFBFBD>Ŵ<EFBFBD>С
CPoint position; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>λ<EFBFBD><CEBB>
};
};
};