LibreDWG API  0.13.3
LibreDWG API - The DWG Library
out_json.c File Reference
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include "common.h"
#include "codepages.h"
#include "bits.h"
#include "dwg.h"
#include "decode.h"
#include "out_json.h"
#include "logging.h"
#include "common_entity_handle_data.spec"
#include "common_entity_data.spec"
#include "common_object_handle_data.spec"
#include "dwg.spec"
#include "classes.inc"
#include "header.spec"
#include "header_variables_r11.spec"
#include "header_variables.spec"
#include "r2004_file_header.spec"
#include "summaryinfo.spec"
#include "appinfo.spec"
#include "filedeplist.spec"
#include "security.spec"
#include "objfreespace.spec"
#include "acds.spec"
#include "template.spec"
#include "auxheader.spec"
#include "2ndheader.spec"

Macros

#define IS_JSON
 
#define DWG_LOGLEVEL   DWG_LOGLEVEL_NONE
 
#define ACTION   json
 
#define ISFIRST   (dat->opts & DWG_OPTS_JSONFIRST)
 
#define SETFIRST   dat->opts |= DWG_OPTS_JSONFIRST
 
#define CLEARFIRST   dat->opts &= ~DWG_OPTS_JSONFIRST
 
#define PREFIX   _prefix (dat);
 
#define IS_MINJS   (dat->opts & DWG_OPTS_MINIMAL)
 
#define JSON_SPC   IS_MINJS ? "" : " "
 
#define JSON_NL   IS_MINJS ? "" : "\n"
 
#define JSON_KEY   "\"%s\":%s"
 
#define PRINTFIRST
 
#define FIRSTPREFIX   PRINTFIRST PREFIX
 
#define KEYs(nam)   FIRSTPREFIX fprintf (dat->fh, "\"%s\":%s", nam, JSON_SPC)
 
#define KEY(nam)    FIRSTPREFIX fprintf (dat->fh, "\"%s\":%s", _path_field (#nam), JSON_SPC)
 
#define ARRAY
 
#define ENDARRAY
 
#define HASH
 
#define ENDHASH
 
#define TABLE(nam)
 
#define ENDTAB()   ENDHASH
 
#define RECORD(nam)
 
#define ENDRECORD()   ENDHASH
 
#define SECTION(nam)
 
#define ENDSEC()   ENDARRAY
 
#define FORMAT_RD   "%.14f"
 
#define FORMAT_BD   FORMAT_RD
 
#define FORMAT_RLL   "%" PRIu64
 
#define FORMAT_BLL   "%" PRIu64
 
#define FORMAT_HREF   "[%u,%u," FORMAT_RLL "," FORMAT_RLL "]"
 
#define FORMAT_HREF11   "[%u,%hd," FORMAT_RLL "]"
 
#define ARGS_H(hdl)   hdl.code, hdl.size, hdl.value
 
#define FORMAT_H   "[%u,%u," FORMAT_RLL "]"
 
#define ARGS_HREF(ref)
 
#define ARGS_HREF11(ref)   ref->handleref.size, ref->r11_idx, ref->absolute_ref
 
#define FORMAT_RC   "%d"
 
#define FORMAT_RSx   FORMAT_RS
 
#define FORMAT_RLx   FORMAT_RL
 
#define FORMAT_BLx   FORMAT_BL
 
#define FORMAT_BLX   FORMAT_BL
 
#define FORMAT_4BITS   FORMAT_RC
 
#define VALUE(value, type, dxf)   fprintf (dat->fh, FORMAT_##type, value)
 
#define VALUE_B(value, dxf)   VALUE (value, B, dxf)
 
#define VALUE_RC(value, dxf)   VALUE (value, RC, dxf)
 
#define VALUE_RS(value, dxf)   VALUE (value, RS, dxf)
 
#define VALUE_RL(value, dxf)   VALUE (value, RL, dxf)
 
#define VALUE_RLx(value, dxf)   VALUE ((BITCODE_RL)value, RL, dxf)
 
#define VALUE_RLL(value, dxf)   VALUE (value, RLL, dxf)
 
#define VALUE_RD(value, dxf)   _VALUE_RD (value, dxf)
 
#define _VALUE_RD(value, dxf)
 
#define VALUE_2RD(pt, dxf)
 
#define VALUE_2DD(pt, def, dxf)   VALUE_2RD (pt, dxf)
 
#define VALUE_3RD(pt, dxf)
 
#define VALUE_3BD(pt, dxf)   VALUE_3RD (pt, dxf)
 
#define VALUE_TV(nam, dxf)
 
#define FIELD(nam, type, dxf)
 
#define _FIELD(nam, type, value)
 
#define ENT_FIELD(nam, type, value)
 
#define SUB_FIELD(o, nam, type, dxf)
 
#define FIELD_CAST(nam, type, cast, dxf)   FIELD (nam, cast, dxf)
 
#define SUB_FIELD_CAST(o, nam, type, cast, dxf)   SUB_FIELD (o, nam, cast, dxf)
 
#define FIELD_TRACE(nam, type)
 
#define FIELD_G_TRACE(nam, type, dxf)
 
#define FIELD_TEXT(nam, str)
 
#define VALUE_TEXT(str)
 
#define VALUE_TEXT_TU(wstr)   print_wcquote (dat, (BITCODE_TU)wstr)
 
#define FIELD_TEXT_TU(nam, wstr)
 
#define FIELD_TFv(nam, len, dxf)
 
#define FIELD_TF(nam, len, dxf)
 
#define FIELD_TFF(nam, len, dxf)   FIELD_TF (nam, len, dxf)
 
#define FIELD_VALUE(nam)   _obj->nam
 
#define ANYCODE   -1
 
#define VALUE_HANDLE(hdlptr, nam, handle_code, dxf)
 
#define VALUE_H(hdl, dxf)   fprintf (dat->fh, FORMAT_H "", ARGS_H (hdl))
 
#define FIELD_HANDLE(nam, handle_code, dxf)
 
#define SUB_FIELD_HANDLE(o, nam, handle_code, dxf)
 
#define FIELD_DATAHANDLE(nam, code, dxf)   FIELD_HANDLE (nam, code, dxf)
 
#define FIELD_HANDLE_N(nam, vcount, handle_code, dxf)
 
#define SUB_FIELD_HANDLE_N(o, nam, handle_code, dxf)
 
#define VALUE_BINARY(buf, len, dxf)
 
#define FIELD_BINARY(nam, size, dxf)
 
#define FIELD_B(nam, dxf)   FIELD (nam, B, dxf)
 
#define FIELD_BB(nam, dxf)   FIELD (nam, BB, dxf)
 
#define FIELD_3B(nam, dxf)   FIELD (nam, 3B, dxf)
 
#define FIELD_BS(nam, dxf)   FIELD (nam, BS, dxf)
 
#define FIELD_BL(nam, dxf)   FIELD (nam, BL, dxf)
 
#define FIELD_BLL(nam, dxf)   FIELD (nam, BLL, dxf)
 
#define FIELD_BD(nam, dxf)
 
#define FIELD_2RD(nam, dxf)
 
#define FIELD_3RD(nam, dxf)
 
#define SUB_FIELD_BD(o, nam, dxf)
 
#define FIELD_RC(nam, dxf)   FIELD (nam, RC, dxf)
 
#define FIELD_RCx(nam, dxf)   FIELD (nam, RC, dxf)
 
#define FIELD_RS(nam, dxf)   FIELD (nam, RS, dxf)
 
#define FIELD_RSd(nam, dxf)   FIELD (nam, RSd, dxf)
 
#define FIELD_RD(nam, dxf)   FIELD_BD (nam, dxf)
 
#define FIELD_RL(nam, dxf)   FIELD (nam, RL, dxf)
 
#define FIELD_RLL(nam, dxf)   FIELD (nam, RLL, dxf)
 
#define FIELD_MC(nam, dxf)   FIELD (nam, MC, dxf)
 
#define FIELD_MS(nam, dxf)   FIELD (nam, MS, dxf)
 
#define FIELD_TFFx(nam, len, dxf)   FIELD_BINARY (nam, len, dxf)
 
#define FIELD_TV(nam, dxf)   FIELD_TEXT (nam, _obj->nam)
 
#define FIELD_TU(nam, dxf)   FIELD_TEXT_TU (nam, (BITCODE_TU)_obj->nam)
 
#define FIELD_T16(nam, dxf)   FIELD_T (nam, dxf)
 
#define FIELD_TU16(nam, dxf)   FIELD_TU (nam, dxf)
 
#define FIELD_T32(nam, dxf)   FIELD_T (nam, dxf)
 
#define FIELD_T(nam, dxf)
 
#define _FIELD_T(nam, str)
 
#define VALUE_T(str)
 
#define _FIELD_TV_ALPHA(nam, str)
 
#define FIELD_BT(nam, dxf)   FIELD (nam, BT, dxf);
 
#define FIELD_4BITS(nam, dxf)   FIELD (nam, 4BITS, dxf)
 
#define FIELD_BE(nam, dxf)   FIELD_3RD (nam, dxf)
 
#define FIELD_DD(nam, _default, dxf)   FIELD_BD (nam, dxf)
 
#define FIELD_2BD(nam, dxf)   FIELD_2RD (nam, dxf)
 
#define FIELD_2BD_1(nam, dxf)   FIELD_2RD (nam, dxf)
 
#define FIELD_2DD(nam, def, dxf)   FIELD_2RD (nam, dxf)
 
#define FIELD_3DD(nam, def, dxf)   FIELD_3RD (nam, dxf)
 
#define FIELD_3BD(nam, dxf)   FIELD_3RD (nam, dxf)
 
#define FIELD_3BD_1(nam, dxf)   FIELD_3RD (nam, dxf)
 
#define FIELD_3DPOINT(nam, dxf)   FIELD_3BD (nam, dxf)
 
#define SUB_FIELD_T(o, nam, dxf)
 
#define SUB_FIELD_B(o, nam, dxf)   SUB_FIELD (o, nam, B, dxf)
 
#define SUB_FIELD_BB(o, nam, dxf)   SUB_FIELD (o, nam, BB, dxf)
 
#define SUB_FIELD_3B(o, nam, dxf)   SUB_FIELD (o, nam, 3B, dxf)
 
#define SUB_FIELD_BS(o, nam, dxf)   SUB_FIELD (o, nam, BS, dxf)
 
#define SUB_FIELD_BSd(o, nam, dxf)   SUB_FIELD (o, nam, BSd, dxf)
 
#define SUB_FIELD_BL(o, nam, dxf)   SUB_FIELD (o, nam, BL, dxf)
 
#define SUB_FIELD_BLx(o, nam, dxf)   SUB_FIELD (o, nam, BLx, dxf)
 
#define SUB_FIELD_BLd(o, nam, dxf)   SUB_FIELD (o, nam, BLd, dxf)
 
#define SUB_FIELD_RC(o, nam, dxf)   SUB_FIELD (o, nam, RC, dxf)
 
#define SUB_FIELD_RCd(o, nam, dxf)   SUB_FIELD (o, nam, RCd, dxf)
 
#define SUB_FIELD_RS(o, nam, dxf)   SUB_FIELD (o, nam, RS, dxf)
 
#define SUB_FIELD_RL(o, nam, dxf)   SUB_FIELD (o, nam, RL, dxf)
 
#define SUB_FIELD_BLL(o, nam, dxf)   SUB_FIELD (o, nam, BLL, dxf)
 
#define SUB_FIELD_RLL(o, nam, dxf)   SUB_FIELD (o, nam, RLL, dxf)
 
#define SUB_FIELD_RD(o, nam, dxf)   SUB_FIELD_BD (o, nam, dxf)
 
#define SUB_FIELD_3BD_inl(o, nam, dxf)
 
#define SUB_FIELD_2BD(o, nam, dxf)
 
#define SUB_FIELD_2BD_1(o, nam, dxf)
 
#define SUB_FIELD_2RD(o, nam, dxf)
 
#define SUB_FIELD_3RD(o, nam, dxf)
 
#define SUB_FIELD_3BD(o, nam, dxf)
 
#define SUB_FIELD_3DPOINT(o, nam, dxf)
 
#define FIELD_CMC(color, dxf)   field_cmc (dat, #color, &_obj->color)
 
#define SUB_FIELD_CMC(o, color, dxf)   field_cmc (dat, #color, &_obj->o.color)
 
#define FIELD_TIMEBLL(nam, dxf)
 
#define FIELD_TIMERLL(nam, dxf)   FIELD_TIMEBLL (nam, dxf)
 
#define FIELD_VECTOR_N(nam, type, size, dxf)
 
#define SUB_FIELD_VECTOR_N(o, nam, type, size, dxf)
 
#define FIELD_VECTOR_T(nam, type, size, dxf)
 
#define SUB_FIELD_VECTOR_TYPESIZE(o, nam, size, typesize, dxf)
 
#define FIELD_VECTOR(nam, type, size, dxf)    FIELD_VECTOR_N (nam, type, _obj->size, dxf)
 
#define FIELD_VECTOR_INL(nam, type, size, dxf)    FIELD_VECTOR_N (nam, type, size, dxf)
 
#define SUB_FIELD_VECTOR(o, nam, type, size, dxf)    SUB_FIELD_VECTOR_N (o, nam, type, _obj->o.size, dxf)
 
#define FIELD_2RD_VECTOR(nam, size, dxf)
 
#define FIELD_2DD_VECTOR(nam, size, dxf)
 
#define FIELD_3DPOINT_VECTOR(nam, size, dxf)
 
#define HANDLE_VECTOR_N(nam, size, code, dxf)
 
#define HANDLE_VECTOR(nam, sizefield, code, dxf)    HANDLE_VECTOR_N (nam, FIELD_VALUE (sizefield), code, dxf)
 
#define SUB_HANDLE_VECTOR(o, nam, size, code, dxf)
 
#define REACTORS(code)
 
#define ENT_REACTORS(code)
 
#define SUBCLASS(name)
 
#define _REPEAT_N(times, nam, type, idx)
 
#define REPEAT_N(times, nam, type)   _REPEAT_N (times, nam, type, 1)
 
#define REPEAT_CN(times, nam, type)   REPEAT_N (times, nam, type)
 
#define _REPEAT_C(times, nam, type, idx)    _REPEAT_N (_obj->times, nam, type, idx)
 
#define _REPEAT(times, nam, type, idx)   _REPEAT_N (_obj->times, nam, type, idx)
 
#define REPEAT(times, nam, type)   _REPEAT (times, nam, type, 1)
 
#define REPEAT2(times, nam, type)   _REPEAT (times, nam, type, 2)
 
#define REPEAT3(times, nam, type)   _REPEAT (times, nam, type, 3)
 
#define REPEAT4(times, nam, type)   _REPEAT (times, nam, type, 4)
 
#define REPEAT_C(times, nam, type)   _REPEAT_C (times, nam, type, 1)
 
#define REPEAT2_C(times, nam, type)   _REPEAT_C (times, nam, type, 2)
 
#define REPEAT3_C(times, nam, type)   _REPEAT_C (times, nam, type, 3)
 
#define REPEAT4_C(times, nam, type)   _REPEAT_C (times, nam, type, 4)
 
#define _REPEAT_CN(times, nam, type, idx)   _REPEAT_N (times, nam, type, idx)
 
#define _REPEAT_CNF(times, nam, type, idx)   _REPEAT_N (times, nam, type, idx)
 
#define _REPEAT_NF(times, nam, type, idx)   _REPEAT_N (times, nam, type, idx)
 
#define REPEAT_F(times, size, nam, type)
 
#define REPEAT_BLOCK   FIRSTPREFIX HASH;
 
#define END_REPEAT_BLOCK   ENDHASH;
 
#define END_REPEAT(nam)
 
#define END_REPEAT_F(nam)   END_REPEAT (nam)
 
#define FIELD_NUM_INSERTS(num_inserts, type, dxf)    FIELD (num_inserts, type, dxf)
 
#define FIELD_XDATA(nam, size)   error |= json_xdata (dat, _obj)
 
#define XDICOBJHANDLE(code)
 
#define ENT_XDICOBJHANDLE(code)
 
#define COMMON_ENTITY_HANDLE_DATA
 
#define SECTION_STRING_STREAM
 
#define START_STRING_STREAM
 
#define END_STRING_STREAM
 
#define START_HANDLE_STREAM
 
#define START_OBJECT_HANDLE_STREAM
 
#define CONTROL_HANDLE_STREAM
 
#define DWG_ENTITY(token)
 
#define DWG_ENTITY_END
 
#define DWG_OBJECT(token)
 
#define DWG_OBJECT_END
 
#define JSON_3DSOLID   json_3dsolid (dat, obj, (Dwg_Entity_3DSOLID *)_obj);
 

Functions

void json_write_TFv (Bit_Chain *restrict dat, const BITCODE_TF restrict src, const size_t len)
 
void json_write_TF (Bit_Chain *restrict dat, const BITCODE_TF restrict src, const size_t len)
 
char * json_cquote (char *restrict dest, const char *restrict src, const size_t len, const BITCODE_RS codepage)
 
int dwg_write_json (Bit_Chain *restrict dat, Dwg_Data *restrict dwg)
 

Macro Definition Documentation

◆ _FIELD

#define _FIELD (   nam,
  type,
  value 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, "\"" #nam "\":%s" FORMAT_##type, JSON_SPC, \
obj->nam); \
}
#define JSON_SPC
Definition: out_json.c:75

◆ _FIELD_T

#define _FIELD_T (   nam,
  str 
)
Value:
{ \
if (IS_FROM_TU (dat)) \
{ \
FIELD_TEXT_TU (nam, str); \
} \
else \
{ \
FIELD_TEXT (nam, str); \
} \
}
#define IS_FROM_TU(dat)
Definition: bits.h:88

◆ _FIELD_TV_ALPHA

#define _FIELD_TV_ALPHA (   nam,
  str 
)
Value:
if ((str) && isalpha (*(str))) \
{ \
FIELD_TEXT (nam, str) \
}

◆ _REPEAT

#define _REPEAT (   times,
  nam,
  type,
  idx 
)    _REPEAT_N (_obj->times, nam, type, idx)

◆ _REPEAT_C

#define _REPEAT_C (   times,
  nam,
  type,
  idx 
)     _REPEAT_N (_obj->times, nam, type, idx)

◆ _REPEAT_CN

#define _REPEAT_CN (   times,
  nam,
  type,
  idx 
)    _REPEAT_N (times, nam, type, idx)

◆ _REPEAT_CNF

#define _REPEAT_CNF (   times,
  nam,
  type,
  idx 
)    _REPEAT_N (times, nam, type, idx)

◆ _REPEAT_N

#define _REPEAT_N (   times,
  nam,
  type,
  idx 
)
Value:
if (_obj->nam) \
{ \
KEY (nam); \
ARRAY; \
for (rcount##idx = 0; rcount##idx < (BITCODE_BL)times; rcount##idx++) \
{
uint32_t BITCODE_BL
Definition: dwg.h:115

◆ _REPEAT_NF

#define _REPEAT_NF (   times,
  nam,
  type,
  idx 
)    _REPEAT_N (times, nam, type, idx)

◆ _VALUE_RD

#define _VALUE_RD (   value,
  dxf 
)
Value:
{ \
char _buf[256]; \
size_t k; \
snprintf (_buf, 255, FORMAT_RD, value); \
k = strlen (_buf); \
if (k > 0 && strrchr (_buf, '.') && _buf[k - 1] == '0') \
{ \
for (k--; k > 1 && _buf[k - 1] != '.' && _buf[k] == '0'; k--) \
_buf[k] = '\0'; \
} \
fprintf (dat->fh, "%s", _buf); \
}
#define FORMAT_RD
Definition: out_json.c:146

◆ ACTION

#define ACTION   json

◆ ANYCODE

#define ANYCODE   -1

◆ ARGS_H

#define ARGS_H (   hdl)    hdl.code, hdl.size, hdl.value

◆ ARGS_HREF

#define ARGS_HREF (   ref)
Value:
ref->handleref.code, ref->handleref.size, ref->handleref.value, \
ref->absolute_ref

◆ ARGS_HREF11

#define ARGS_HREF11 (   ref)    ref->handleref.size, ref->r11_idx, ref->absolute_ref

◆ ARRAY

#define ARRAY
Value:
{ \
fprintf (dat->fh, "[%s", JSON_NL); \
SETFIRST; \
dat->bit++; \
}
#define JSON_NL
Definition: out_json.c:76

◆ CLEARFIRST

#define CLEARFIRST   dat->opts &= ~DWG_OPTS_JSONFIRST

◆ COMMON_ENTITY_HANDLE_DATA

#define COMMON_ENTITY_HANDLE_DATA

◆ CONTROL_HANDLE_STREAM

#define CONTROL_HANDLE_STREAM

◆ DWG_ENTITY

#define DWG_ENTITY (   token)

◆ DWG_ENTITY_END

#define DWG_ENTITY_END
Value:
if (obj->num_unknown_rest) \
UNKNOWN_BITS_REST \
return error; \
}

◆ DWG_LOGLEVEL

#define DWG_LOGLEVEL   DWG_LOGLEVEL_NONE

◆ DWG_OBJECT

#define DWG_OBJECT (   token)

◆ DWG_OBJECT_END

#define DWG_OBJECT_END
Value:
if (obj->num_unknown_rest) \
UNKNOWN_BITS_REST \
return error; \
}

◆ END_REPEAT

#define END_REPEAT (   nam)
Value:
} \
ENDARRAY; \
}

◆ END_REPEAT_BLOCK

#define END_REPEAT_BLOCK   ENDHASH;

◆ END_REPEAT_F

#define END_REPEAT_F (   nam)    END_REPEAT (nam)

◆ END_STRING_STREAM

#define END_STRING_STREAM

◆ ENDARRAY

#define ENDARRAY
Value:
{ \
fprintf (dat->fh, "%s", JSON_NL); \
dat->bit--; \
PREFIX fprintf (dat->fh, "]"); \
CLEARFIRST; \
}

◆ ENDHASH

#define ENDHASH
Value:
{ \
fprintf (dat->fh, "%s", JSON_NL); \
dat->bit--; \
PREFIX fprintf (dat->fh, "}"); \
CLEARFIRST; \
}

◆ ENDRECORD

#define ENDRECORD ( )    ENDHASH

◆ ENDSEC

#define ENDSEC ( )    ENDARRAY

◆ ENDTAB

#define ENDTAB ( )    ENDHASH

◆ ENT_FIELD

#define ENT_FIELD (   nam,
  type,
  value 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY FORMAT_##type, _path_field (#nam), \
JSON_SPC, _ent->nam); \
}
#define JSON_KEY
Definition: out_json.c:77

◆ ENT_REACTORS

#define ENT_REACTORS (   code)
Value:
if (dat->version >= R_13b1 && _ent->num_reactors && _ent->reactors) \
{ \
KEY (reactors); \
ARRAY; \
for (vcount = 0; vcount < _ent->num_reactors; vcount++) \
{ \
FIRSTPREFIX VALUE_HANDLE (_ent->reactors[vcount], reactors, code, \
330); \
} \
ENDARRAY; \
}
@ R_13b1
Definition: dwg.h:290
#define VALUE_HANDLE(hdlptr, nam, handle_code, dxf)
Definition: out_json.c:316

◆ ENT_XDICOBJHANDLE

#define ENT_XDICOBJHANDLE (   code)
Value:
if ((dat->version < R_2004 || _ent->is_xdic_missing == 0) \
&& (_ent->xdicobjhandle != NULL) \
&& (_ent->xdicobjhandle->handleref.value != 0)) \
{ \
KEY (xdicobjhandle); \
VALUE_HANDLE (_ent->xdicobjhandle, xdicobjhandle, code, -3); \
}
@ R_2004
Definition: dwg.h:302

◆ FIELD

#define FIELD (   nam,
  type,
  dxf 
)
Value:
if (!memBEGINc (#nam, "num_")) \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY FORMAT_##type, \
_path_field (#nam), JSON_SPC, _obj->nam); \
}
#define memBEGINc(s1, s2)
Definition: common.h:581

◆ FIELD_2BD

#define FIELD_2BD (   nam,
  dxf 
)    FIELD_2RD (nam, dxf)

◆ FIELD_2BD_1

#define FIELD_2BD_1 (   nam,
  dxf 
)    FIELD_2RD (nam, dxf)

◆ FIELD_2DD

#define FIELD_2DD (   nam,
  def,
  dxf 
)    FIELD_2RD (nam, dxf)

◆ FIELD_2DD_VECTOR

#define FIELD_2DD_VECTOR (   nam,
  size,
  dxf 
)
Value:
if (_obj->nam) \
{ \
KEY (nam); \
ARRAY; \
for (vcount = 0; vcount < (BITCODE_BL)_obj->size; vcount++) \
{ \
FIRSTPREFIX VALUE_2RD (_obj->nam[vcount], dxf); \
} \
ENDARRAY; \
}
#define VALUE_2RD(pt, dxf)
Definition: out_json.c:197

◆ FIELD_2RD

#define FIELD_2RD (   nam,
  dxf 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, "\"" #nam "\":%s", JSON_SPC); \
VALUE_2RD (_obj->nam, dxf); \
}

◆ FIELD_2RD_VECTOR

#define FIELD_2RD_VECTOR (   nam,
  size,
  dxf 
)
Value:
if (_obj->nam) \
{ \
KEY (nam); \
ARRAY; \
for (vcount = 0; vcount < (BITCODE_BL)_obj->size; vcount++) \
{ \
FIRSTPREFIX VALUE_2RD (FIELD_VALUE (nam[vcount]), dxf); \
} \
ENDARRAY; \
}
#define FIELD_VALUE(nam)
Definition: out_json.c:313

◆ FIELD_3B

#define FIELD_3B (   nam,
  dxf 
)    FIELD (nam, 3B, dxf)

◆ FIELD_3BD

#define FIELD_3BD (   nam,
  dxf 
)    FIELD_3RD (nam, dxf)

◆ FIELD_3BD_1

#define FIELD_3BD_1 (   nam,
  dxf 
)    FIELD_3RD (nam, dxf)

◆ FIELD_3DD

#define FIELD_3DD (   nam,
  def,
  dxf 
)    FIELD_3RD (nam, dxf)

◆ FIELD_3DPOINT

#define FIELD_3DPOINT (   nam,
  dxf 
)    FIELD_3BD (nam, dxf)

◆ FIELD_3DPOINT_VECTOR

#define FIELD_3DPOINT_VECTOR (   nam,
  size,
  dxf 
)
Value:
if (_obj->nam) \
{ \
KEY (nam); \
ARRAY; \
for (vcount = 0; vcount < (BITCODE_BL)_obj->size; vcount++) \
{ \
FIRSTPREFIX VALUE_3BD (FIELD_VALUE (nam[vcount]), dxf); \
} \
ENDARRAY; \
}
#define VALUE_3BD(pt, dxf)
Definition: out_json.c:216

◆ FIELD_3RD

#define FIELD_3RD (   nam,
  dxf 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, "\"" #nam "\":%s", JSON_SPC); \
VALUE_3RD (_obj->nam, dxf); \
}

◆ FIELD_4BITS

#define FIELD_4BITS (   nam,
  dxf 
)    FIELD (nam, 4BITS, dxf)

◆ FIELD_B

#define FIELD_B (   nam,
  dxf 
)    FIELD (nam, B, dxf)

◆ FIELD_BB

#define FIELD_BB (   nam,
  dxf 
)    FIELD (nam, BB, dxf)

◆ FIELD_BD

#define FIELD_BD (   nam,
  dxf 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY, _path_field (#nam), JSON_SPC); \
_VALUE_RD (_obj->nam, dxf); \
}

◆ FIELD_BE

#define FIELD_BE (   nam,
  dxf 
)    FIELD_3RD (nam, dxf)

◆ FIELD_BINARY

#define FIELD_BINARY (   nam,
  size,
  dxf 
)
Value:
{ \
KEY (nam); \
fprintf (dat->fh, "\""); \
if (_obj->nam) \
{ \
for (long _j = 0; _j < (long)size; _j++) \
{ \
fprintf (dat->fh, "%02X", ((BITCODE_RC *)_obj->nam)[_j]); \
} \
} \
fprintf (dat->fh, "\""); \
}
unsigned char BITCODE_RC
Definition: dwg.h:81

◆ FIELD_BL

#define FIELD_BL (   nam,
  dxf 
)    FIELD (nam, BL, dxf)

◆ FIELD_BLL

#define FIELD_BLL (   nam,
  dxf 
)    FIELD (nam, BLL, dxf)

◆ FIELD_BS

#define FIELD_BS (   nam,
  dxf 
)    FIELD (nam, BS, dxf)

◆ FIELD_BT

#define FIELD_BT (   nam,
  dxf 
)    FIELD (nam, BT, dxf);

◆ FIELD_CAST

#define FIELD_CAST (   nam,
  type,
  cast,
  dxf 
)    FIELD (nam, cast, dxf)

◆ FIELD_CMC

#define FIELD_CMC (   color,
  dxf 
)    field_cmc (dat, #color, &_obj->color)

◆ FIELD_DATAHANDLE

#define FIELD_DATAHANDLE (   nam,
  code,
  dxf 
)    FIELD_HANDLE (nam, code, dxf)

◆ FIELD_DD

#define FIELD_DD (   nam,
  _default,
  dxf 
)    FIELD_BD (nam, dxf)

◆ FIELD_G_TRACE

#define FIELD_G_TRACE (   nam,
  type,
  dxf 
)

◆ FIELD_HANDLE

#define FIELD_HANDLE (   nam,
  handle_code,
  dxf 
)
Value:
{ \
if (_obj->nam) \
{ \
PRE (R_13b1) \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY FORMAT_HREF11 "", \
_path_field (#nam), JSON_SPC, \
ARGS_HREF11 (_obj->nam)); \
} \
LATER_VERSIONS \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY FORMAT_HREF "", \
_path_field (#nam), JSON_SPC, \
ARGS_HREF (_obj->nam)); \
} \
} \
else \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY "[0,%s0]", _path_field (#nam), \
} \
}
#define FORMAT_HREF11
Definition: out_json.c:152
#define FORMAT_HREF
Definition: out_json.c:150
#define ARGS_HREF11(ref)
Definition: out_json.c:160
#define ARGS_HREF(ref)
Definition: out_json.c:156

◆ FIELD_HANDLE_N

#define FIELD_HANDLE_N (   nam,
  vcount,
  handle_code,
  dxf 
)
Value:
if (_obj->nam) \
{ \
PRE (R_13b1) \
{ \
PREFIX fprintf (dat->fh, FORMAT_HREF11 "", ARGS_HREF11 (_obj->nam)); \
} \
LATER_VERSIONS \
{ \
PREFIX fprintf (dat->fh, FORMAT_HREF "", ARGS_HREF (_obj->nam)); \
} \
} \
else \
{ \
PREFIX fprintf (dat->fh, "[0,%s0]", JSON_SPC); \
}
#define PRINTFIRST
Definition: out_json.c:79

◆ FIELD_MC

#define FIELD_MC (   nam,
  dxf 
)    FIELD (nam, MC, dxf)

◆ FIELD_MS

#define FIELD_MS (   nam,
  dxf 
)    FIELD (nam, MS, dxf)

◆ FIELD_NUM_INSERTS

#define FIELD_NUM_INSERTS (   num_inserts,
  type,
  dxf 
)     FIELD (num_inserts, type, dxf)

◆ FIELD_RC

#define FIELD_RC (   nam,
  dxf 
)    FIELD (nam, RC, dxf)

◆ FIELD_RCx

#define FIELD_RCx (   nam,
  dxf 
)    FIELD (nam, RC, dxf)

◆ FIELD_RD

#define FIELD_RD (   nam,
  dxf 
)    FIELD_BD (nam, dxf)

◆ FIELD_RL

#define FIELD_RL (   nam,
  dxf 
)    FIELD (nam, RL, dxf)

◆ FIELD_RLL

#define FIELD_RLL (   nam,
  dxf 
)    FIELD (nam, RLL, dxf)

◆ FIELD_RS

#define FIELD_RS (   nam,
  dxf 
)    FIELD (nam, RS, dxf)

◆ FIELD_RSd

#define FIELD_RSd (   nam,
  dxf 
)    FIELD (nam, RSd, dxf)

◆ FIELD_T

#define FIELD_T (   nam,
  dxf 
)
Value:
{ \
if (IS_FROM_TU (dat)) \
{ \
FIELD_TU (nam, dxf); \
} \
else \
{ \
FIELD_TV (nam, dxf); \
} \
}

◆ FIELD_T16

#define FIELD_T16 (   nam,
  dxf 
)    FIELD_T (nam, dxf)

◆ FIELD_T32

#define FIELD_T32 (   nam,
  dxf 
)    FIELD_T (nam, dxf)

◆ FIELD_TEXT

#define FIELD_TEXT (   nam,
  str 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY, _path_field (#nam), JSON_SPC); \
VALUE_TEXT ((char *)str) \
}

◆ FIELD_TEXT_TU

#define FIELD_TEXT_TU (   nam,
  wstr 
)
Value:
{ \
KEY (nam); \
VALUE_TEXT_TU ((BITCODE_TU)wstr); \
}
BITCODE_RS * BITCODE_TU
Definition: dwg.h:216

◆ FIELD_TF

#define FIELD_TF (   nam,
  len,
  dxf 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY, _path_field (#nam), JSON_SPC); \
json_write_TF (dat, (const BITCODE_TF)_obj->nam, len); \
}
unsigned char * BITCODE_TF
Definition: dwg.h:185

◆ FIELD_TFF

#define FIELD_TFF (   nam,
  len,
  dxf 
)    FIELD_TF (nam, len, dxf)

◆ FIELD_TFFx

#define FIELD_TFFx (   nam,
  len,
  dxf 
)    FIELD_BINARY (nam, len, dxf)

◆ FIELD_TFv

#define FIELD_TFv (   nam,
  len,
  dxf 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY, _path_field (#nam), JSON_SPC); \
json_write_TFv (dat, (const BITCODE_TF)_obj->nam, len); \
}

◆ FIELD_TIMEBLL

#define FIELD_TIMEBLL (   nam,
  dxf 
)
Value:
FIRSTPREFIX fprintf (dat->fh, \
"\"" #nam "\":%s[%s" FORMAT_BL ",%s" FORMAT_BL "%s]", \
JSON_SPC, JSON_SPC, _obj->nam.days, JSON_SPC, \
_obj->nam.ms, JSON_SPC)
#define FORMAT_BL
Definition: dwg.h:147
#define FIRSTPREFIX
Definition: out_json.c:86

◆ FIELD_TIMERLL

#define FIELD_TIMERLL (   nam,
  dxf 
)    FIELD_TIMEBLL (nam, dxf)

◆ FIELD_TRACE

#define FIELD_TRACE (   nam,
  type 
)

◆ FIELD_TU

#define FIELD_TU (   nam,
  dxf 
)    FIELD_TEXT_TU (nam, (BITCODE_TU)_obj->nam)

◆ FIELD_TU16

#define FIELD_TU16 (   nam,
  dxf 
)    FIELD_TU (nam, dxf)

◆ FIELD_TV

#define FIELD_TV (   nam,
  dxf 
)    FIELD_TEXT (nam, _obj->nam)

◆ FIELD_VALUE

#define FIELD_VALUE (   nam)    _obj->nam

◆ FIELD_VECTOR

#define FIELD_VECTOR (   nam,
  type,
  size,
  dxf 
)     FIELD_VECTOR_N (nam, type, _obj->size, dxf)

◆ FIELD_VECTOR_INL

#define FIELD_VECTOR_INL (   nam,
  type,
  size,
  dxf 
)     FIELD_VECTOR_N (nam, type, size, dxf)

◆ FIELD_VECTOR_N

#define FIELD_VECTOR_N (   nam,
  type,
  size,
  dxf 
)
Value:
KEY (nam); \
ARRAY; \
if (_obj->nam) \
{ \
for (vcount = 0; vcount < (BITCODE_BL)size; vcount++) \
{ \
FIRSTPREFIX fprintf (dat->fh, FORMAT_##type, _obj->nam[vcount]); \
} \
} \
#define ENDARRAY
Definition: out_json.c:99
#define KEY(nam)
Definition: out_json.c:90

◆ FIELD_VECTOR_T

#define FIELD_VECTOR_T (   nam,
  type,
  size,
  dxf 
)
Value:
KEY (nam); \
ARRAY; \
if (_obj->nam) \
{ \
BITCODE_BL _size = (BITCODE_BL)_obj->size; \
if (IS_FROM_TU (dat)) \
{ \
for (vcount = 0; vcount < _size; vcount++) \
{ \
FIRSTPREFIX VALUE_TEXT_TU (_obj->nam[vcount]); \
} \
} \
else \
{ \
for (vcount = 0; vcount < _size; vcount++) \
{ \
FIRSTPREFIX VALUE_TEXT (_obj->nam[vcount]) \
} \
} \
} \
#define VALUE_TEXT_TU(wstr)
Definition: out_json.c:293
#define VALUE_TEXT(str)
Definition: out_json.c:252

◆ FIELD_XDATA

#define FIELD_XDATA (   nam,
  size 
)    error |= json_xdata (dat, _obj)

◆ FIRSTPREFIX

#define FIRSTPREFIX   PRINTFIRST PREFIX

◆ FORMAT_4BITS

#define FORMAT_4BITS   FORMAT_RC

◆ FORMAT_BD

#define FORMAT_BD   FORMAT_RD

◆ FORMAT_BLL

#define FORMAT_BLL   "%" PRIu64

◆ FORMAT_BLx

#define FORMAT_BLx   FORMAT_BL

◆ FORMAT_BLX

#define FORMAT_BLX   FORMAT_BL

◆ FORMAT_H

#define FORMAT_H   "[%u,%u," FORMAT_RLL "]"

◆ FORMAT_HREF

#define FORMAT_HREF   "[%u,%u," FORMAT_RLL "," FORMAT_RLL "]"

◆ FORMAT_HREF11

#define FORMAT_HREF11   "[%u,%hd," FORMAT_RLL "]"

◆ FORMAT_RC

#define FORMAT_RC   "%d"

◆ FORMAT_RD

#define FORMAT_RD   "%.14f"

◆ FORMAT_RLL

#define FORMAT_RLL   "%" PRIu64

◆ FORMAT_RLx

#define FORMAT_RLx   FORMAT_RL

◆ FORMAT_RSx

#define FORMAT_RSx   FORMAT_RS

◆ HANDLE_VECTOR

#define HANDLE_VECTOR (   nam,
  sizefield,
  code,
  dxf 
)     HANDLE_VECTOR_N (nam, FIELD_VALUE (sizefield), code, dxf)

◆ HANDLE_VECTOR_N

#define HANDLE_VECTOR_N (   nam,
  size,
  code,
  dxf 
)
Value:
if (_obj->nam) \
{ \
KEY (nam); \
ARRAY; \
for (vcount = 0; vcount < (BITCODE_BL)size; vcount++) \
{ \
FIELD_HANDLE_N (nam[vcount], vcount, code, dxf); \
} \
ENDARRAY; \
}

◆ HASH

#define HASH
Value:
{ \
fprintf (dat->fh, "{%s", JSON_NL); \
SETFIRST; \
dat->bit++; \
}

◆ IS_JSON

#define IS_JSON

◆ IS_MINJS

#define IS_MINJS   (dat->opts & DWG_OPTS_MINIMAL)

◆ ISFIRST

#define ISFIRST   (dat->opts & DWG_OPTS_JSONFIRST)

◆ JSON_3DSOLID

#define JSON_3DSOLID   json_3dsolid (dat, obj, (Dwg_Entity_3DSOLID *)_obj);

◆ JSON_KEY

#define JSON_KEY   "\"%s\":%s"

◆ JSON_NL

#define JSON_NL   IS_MINJS ? "" : "\n"

◆ JSON_SPC

#define JSON_SPC   IS_MINJS ? "" : " "

◆ KEY

#define KEY (   nam)     FIRSTPREFIX fprintf (dat->fh, "\"%s\":%s", _path_field (#nam), JSON_SPC)

◆ KEYs

#define KEYs (   nam)    FIRSTPREFIX fprintf (dat->fh, "\"%s\":%s", nam, JSON_SPC)

◆ PREFIX

#define PREFIX   _prefix (dat);

◆ PRINTFIRST

#define PRINTFIRST
Value:
{ \
if (!ISFIRST) \
fprintf (dat->fh, ",%s", JSON_NL); \
}
#define ISFIRST
Definition: out_json.c:69
#define CLEARFIRST
Definition: out_json.c:71

◆ REACTORS

#define REACTORS (   code)
Value:
if (dat->version >= R_13b1 && obj->tio.object->num_reactors \
&& obj->tio.object->reactors) \
{ \
KEY (reactors); \
ARRAY; \
for (vcount = 0; vcount < obj->tio.object->num_reactors; vcount++) \
{ \
FIRSTPREFIX VALUE_HANDLE (obj->tio.object->reactors[vcount], \
reactors, code, 330); \
} \
ENDARRAY; \
}

◆ RECORD

#define RECORD (   nam)
Value:
KEY (nam); \
HASH

◆ REPEAT

#define REPEAT (   times,
  nam,
  type 
)    _REPEAT (times, nam, type, 1)

◆ REPEAT2

#define REPEAT2 (   times,
  nam,
  type 
)    _REPEAT (times, nam, type, 2)

◆ REPEAT2_C

#define REPEAT2_C (   times,
  nam,
  type 
)    _REPEAT_C (times, nam, type, 2)

◆ REPEAT3

#define REPEAT3 (   times,
  nam,
  type 
)    _REPEAT (times, nam, type, 3)

◆ REPEAT3_C

#define REPEAT3_C (   times,
  nam,
  type 
)    _REPEAT_C (times, nam, type, 3)

◆ REPEAT4

#define REPEAT4 (   times,
  nam,
  type 
)    _REPEAT (times, nam, type, 4)

◆ REPEAT4_C

#define REPEAT4_C (   times,
  nam,
  type 
)    _REPEAT_C (times, nam, type, 4)

◆ REPEAT_BLOCK

#define REPEAT_BLOCK   FIRSTPREFIX HASH;

◆ REPEAT_C

#define REPEAT_C (   times,
  nam,
  type 
)    _REPEAT_C (times, nam, type, 1)

◆ REPEAT_CN

#define REPEAT_CN (   times,
  nam,
  type 
)    REPEAT_N (times, nam, type)

◆ REPEAT_F

#define REPEAT_F (   times,
  size,
  nam,
  type 
)
Value:
if (_obj->times > (BITCODE_BL)size) \
{ \
LOG_WARN ("Invalid %s " FORMAT_BL " > %u", #nam, \
(BITCODE_BL)_obj->times, (unsigned)size); \
_obj->times = (BITCODE_BL)size; \
} \
_REPEAT_N (_obj->times, nam, type, 1)

◆ REPEAT_N

#define REPEAT_N (   times,
  nam,
  type 
)    _REPEAT_N (times, nam, type, 1)

◆ SECTION

#define SECTION (   nam)
Value:
KEY (nam); \
ARRAY

◆ SECTION_STRING_STREAM

#define SECTION_STRING_STREAM

◆ SETFIRST

#define SETFIRST   dat->opts |= DWG_OPTS_JSONFIRST

◆ START_HANDLE_STREAM

#define START_HANDLE_STREAM

◆ START_OBJECT_HANDLE_STREAM

#define START_OBJECT_HANDLE_STREAM

◆ START_STRING_STREAM

#define START_STRING_STREAM

◆ SUB_FIELD

#define SUB_FIELD (   o,
  nam,
  type,
  dxf 
)
Value:
if (!memBEGINc (#nam, "num_")) \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY FORMAT_##type, \
_path_field (#nam), JSON_SPC, _obj->o.nam); \
}

◆ SUB_FIELD_2BD

#define SUB_FIELD_2BD (   o,
  nam,
  dxf 
)
Value:
KEY (nam); \
VALUE_2RD (_obj->o.nam, dxf)

◆ SUB_FIELD_2BD_1

#define SUB_FIELD_2BD_1 (   o,
  nam,
  dxf 
)
Value:
KEY (nam); \
VALUE_2RD (_obj->o.nam, dxf)

◆ SUB_FIELD_2RD

#define SUB_FIELD_2RD (   o,
  nam,
  dxf 
)
Value:
KEY (nam); \
VALUE_2RD (_obj->o.nam, dxf)

◆ SUB_FIELD_3B

#define SUB_FIELD_3B (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, 3B, dxf)

◆ SUB_FIELD_3BD

#define SUB_FIELD_3BD (   o,
  nam,
  dxf 
)
Value:
KEY (nam); \
VALUE_3RD (_obj->o.nam, dxf)

◆ SUB_FIELD_3BD_inl

#define SUB_FIELD_3BD_inl (   o,
  nam,
  dxf 
)
Value:
SUB_FIELD_RD (o, x, dxf); \
SUB_FIELD_RD (o, y, dxf); \
SUB_FIELD_RD (o, z, dxf)
#define SUB_FIELD_RD(o, nam, dxf)
Definition: out_json.c:576

◆ SUB_FIELD_3DPOINT

#define SUB_FIELD_3DPOINT (   o,
  nam,
  dxf 
)
Value:
KEY (nam); \
VALUE_3RD (_obj->o.nam, dxf)

◆ SUB_FIELD_3RD

#define SUB_FIELD_3RD (   o,
  nam,
  dxf 
)
Value:
KEY (nam); \
VALUE_3RD (_obj->o.nam, dxf)

◆ SUB_FIELD_B

#define SUB_FIELD_B (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, B, dxf)

◆ SUB_FIELD_BB

#define SUB_FIELD_BB (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BB, dxf)

◆ SUB_FIELD_BD

#define SUB_FIELD_BD (   o,
  nam,
  dxf 
)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY, _path_field (#nam), JSON_SPC); \
_VALUE_RD (_obj->o.nam, dxf); \
}

◆ SUB_FIELD_BL

#define SUB_FIELD_BL (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BL, dxf)

◆ SUB_FIELD_BLd

#define SUB_FIELD_BLd (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BLd, dxf)

◆ SUB_FIELD_BLL

#define SUB_FIELD_BLL (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BLL, dxf)

◆ SUB_FIELD_BLx

#define SUB_FIELD_BLx (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BLx, dxf)

◆ SUB_FIELD_BS

#define SUB_FIELD_BS (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BS, dxf)

◆ SUB_FIELD_BSd

#define SUB_FIELD_BSd (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, BSd, dxf)

◆ SUB_FIELD_CAST

#define SUB_FIELD_CAST (   o,
  nam,
  type,
  cast,
  dxf 
)    SUB_FIELD (o, nam, cast, dxf)

◆ SUB_FIELD_CMC

#define SUB_FIELD_CMC (   o,
  color,
  dxf 
)    field_cmc (dat, #color, &_obj->o.color)

◆ SUB_FIELD_HANDLE

#define SUB_FIELD_HANDLE (   o,
  nam,
  handle_code,
  dxf 
)
Value:
{ \
if (_obj->o.nam) \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY FORMAT_HREF "", \
_path_field (#nam), JSON_SPC, \
ARGS_HREF (_obj->o.nam)); \
} \
else \
{ \
FIRSTPREFIX fprintf (dat->fh, JSON_KEY "[0,%s0]", _path_field (#nam), \
} \
}

◆ SUB_FIELD_HANDLE_N

#define SUB_FIELD_HANDLE_N (   o,
  nam,
  handle_code,
  dxf 
)
Value:
if (_obj->o.nam) \
{ \
PREFIX fprintf (dat->fh, FORMAT_HREF "", ARGS_HREF (_obj->o.nam)); \
} \
else \
{ \
PREFIX fprintf (dat->fh, "[0,%s0]", JSON_SPC); \
}

◆ SUB_FIELD_RC

#define SUB_FIELD_RC (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, RC, dxf)

◆ SUB_FIELD_RCd

#define SUB_FIELD_RCd (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, RCd, dxf)

◆ SUB_FIELD_RD

#define SUB_FIELD_RD (   o,
  nam,
  dxf 
)    SUB_FIELD_BD (o, nam, dxf)

◆ SUB_FIELD_RL

#define SUB_FIELD_RL (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, RL, dxf)

◆ SUB_FIELD_RLL

#define SUB_FIELD_RLL (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, RLL, dxf)

◆ SUB_FIELD_RS

#define SUB_FIELD_RS (   o,
  nam,
  dxf 
)    SUB_FIELD (o, nam, RS, dxf)

◆ SUB_FIELD_T

#define SUB_FIELD_T (   o,
  nam,
  dxf 
)
Value:
{ \
KEY (nam); \
VALUE_T (_obj->o.nam); \
}

◆ SUB_FIELD_VECTOR

#define SUB_FIELD_VECTOR (   o,
  nam,
  type,
  size,
  dxf 
)     SUB_FIELD_VECTOR_N (o, nam, type, _obj->o.size, dxf)

◆ SUB_FIELD_VECTOR_N

#define SUB_FIELD_VECTOR_N (   o,
  nam,
  type,
  size,
  dxf 
)
Value:
KEY (nam); \
ARRAY; \
if (_obj->o.nam) \
{ \
for (vcount = 0; vcount < (BITCODE_BL)size; vcount++) \
{ \
FIRSTPREFIX fprintf (dat->fh, FORMAT_##type, _obj->o.nam[vcount]); \
} \
} \

◆ SUB_FIELD_VECTOR_TYPESIZE

#define SUB_FIELD_VECTOR_TYPESIZE (   o,
  nam,
  size,
  typesize,
  dxf 
)

◆ SUB_HANDLE_VECTOR

#define SUB_HANDLE_VECTOR (   o,
  nam,
  size,
  code,
  dxf 
)
Value:
KEY (nam); \
if (_obj->o.nam) \
{ \
ARRAY; \
for (vcount = 0; vcount < (BITCODE_BL)_obj->o.size; vcount++) \
{ \
SUB_FIELD_HANDLE_N (o, nam[vcount], code, dxf); \
} \
ENDARRAY; \
} \
else \
{ \
ARRAY; \
ENDARRAY; \
}

◆ SUBCLASS

#define SUBCLASS (   name)
Value:
{ \
FIRSTPREFIX fprintf (dat->fh, "\"_subclass\":%s\"" #name "\"", JSON_SPC); \
}
#define SINCE(v)
Definition: common.h:446

◆ TABLE

#define TABLE (   nam)
Value:
KEY (nam); \
HASH

◆ VALUE

#define VALUE (   value,
  type,
  dxf 
)    fprintf (dat->fh, FORMAT_##type, value)

◆ VALUE_2DD

#define VALUE_2DD (   pt,
  def,
  dxf 
)    VALUE_2RD (pt, dxf)

◆ VALUE_2RD

#define VALUE_2RD (   pt,
  dxf 
)
Value:
{ \
fprintf (dat->fh, "[%s", JSON_SPC); \
VALUE_RD (pt.x, 0); \
fprintf (dat->fh, ",%s", JSON_SPC); \
VALUE_RD (pt.y, 0); \
fprintf (dat->fh, "%s]%s", JSON_SPC, JSON_SPC); \
}

◆ VALUE_3BD

#define VALUE_3BD (   pt,
  dxf 
)    VALUE_3RD (pt, dxf)

◆ VALUE_3RD

#define VALUE_3RD (   pt,
  dxf 
)
Value:
{ \
fprintf (dat->fh, "[%s", JSON_SPC); \
VALUE_RD (pt.x, 0); \
fprintf (dat->fh, ",%s", JSON_SPC); \
VALUE_RD (pt.y, 0); \
fprintf (dat->fh, ",%s", JSON_SPC); \
VALUE_RD (pt.z, 0); \
fprintf (dat->fh, "%s]%s", JSON_SPC, JSON_SPC); \
}

◆ VALUE_B

#define VALUE_B (   value,
  dxf 
)    VALUE (value, B, dxf)

◆ VALUE_BINARY

#define VALUE_BINARY (   buf,
  len,
  dxf 
)
Value:
{ \
fprintf (dat->fh, "\""); \
if (buf && len) \
{ \
for (long _j = 0; _j < (long)len; _j++) \
{ \
fprintf (dat->fh, "%02X", ((BITCODE_RC *)buf)[_j]); \
} \
} \
fprintf (dat->fh, "\""); \
}

◆ VALUE_H

#define VALUE_H (   hdl,
  dxf 
)    fprintf (dat->fh, FORMAT_H "", ARGS_H (hdl))

◆ VALUE_HANDLE

#define VALUE_HANDLE (   hdlptr,
  nam,
  handle_code,
  dxf 
)
Value:
if (hdlptr) \
{ \
PRE (R_13b1) \
{ \
fprintf (dat->fh, FORMAT_HREF11 "", ARGS_HREF11 (hdlptr)); \
} \
LATER_VERSIONS \
{ \
fprintf (dat->fh, FORMAT_HREF "", ARGS_HREF (hdlptr)); \
} \
} \
else \
{ \
fprintf (dat->fh, "[0,0,0]"); \
}

◆ VALUE_RC

#define VALUE_RC (   value,
  dxf 
)    VALUE (value, RC, dxf)

◆ VALUE_RD

#define VALUE_RD (   value,
  dxf 
)    _VALUE_RD (value, dxf)

◆ VALUE_RL

#define VALUE_RL (   value,
  dxf 
)    VALUE (value, RL, dxf)

◆ VALUE_RLL

#define VALUE_RLL (   value,
  dxf 
)    VALUE (value, RLL, dxf)

◆ VALUE_RLx

#define VALUE_RLx (   value,
  dxf 
)    VALUE ((BITCODE_RL)value, RL, dxf)

◆ VALUE_RS

#define VALUE_RS (   value,
  dxf 
)    VALUE (value, RS, dxf)

◆ VALUE_T

#define VALUE_T (   str)
Value:
{ \
if (IS_FROM_TU (dat)) \
{ \
VALUE_TEXT_TU (str); \
} \
else \
{ \
VALUE_TEXT (str) \
} \
}

◆ VALUE_TEXT

#define VALUE_TEXT (   str)
Value:
{ \
if (str) \
{ \
const size_t len = strlen (str); \
if (len < 42) \
{ \
const size_t _len = 6 * len + 1; \
char _buf[256]; \
fprintf (dat->fh, "\"%s\"", \
json_cquote (_buf, str, _len, dat->codepage)); \
} \
else \
{ \
const size_t _len = 6 * len + 1; \
char *_buf = (char *)malloc (_len); \
fprintf (dat->fh, "\"%s\"", \
json_cquote (_buf, str, _len, dat->codepage)); \
free (_buf); \
} \
} \
else \
{ \
fprintf (dat->fh, "\"%s\"", str ? str : ""); \
} \
}
char * json_cquote(char *restrict dest, const char *restrict src, const size_t len, const BITCODE_RS codepage)
Definition: out_json.c:1517

◆ VALUE_TEXT_TU

#define VALUE_TEXT_TU (   wstr)    print_wcquote (dat, (BITCODE_TU)wstr)

◆ VALUE_TV

#define VALUE_TV (   nam,
  dxf 
)

◆ XDICOBJHANDLE

#define XDICOBJHANDLE (   code)
Value:
if ((dat->version < R_2004 || obj->tio.object->is_xdic_missing == 0) \
&& (obj->tio.object->xdicobjhandle != NULL) \
&& (obj->tio.object->xdicobjhandle->handleref.value != 0)) \
{ \
KEY (xdicobjhandle); \
VALUE_HANDLE (obj->tio.object->xdicobjhandle, xdicobjhandle, code, -3); \
}

Function Documentation

◆ dwg_write_json()

int dwg_write_json ( Bit_Chain *restrict  dat,
Dwg_Data *restrict  dwg 
)

◆ json_cquote()

char* json_cquote ( char *restrict  dest,
const char *restrict  src,
const size_t  len,
const BITCODE_RS  codepage 
)

◆ json_write_TF()

void json_write_TF ( Bit_Chain *restrict  dat,
const BITCODE_TF restrict  src,
const size_t  len 
)

◆ json_write_TFv()

void json_write_TFv ( Bit_Chain *restrict  dat,
const BITCODE_TF restrict  src,
const size_t  len 
)