|
KiCad PCB EDA Suite
|
Used for text file output. More...
#include <richio.h>
Public Member Functions | |
| FILE_OUTPUTFORMATTER (const wxString &aFileName, const wxChar *aMode=wxT("wt"), char aQuoteChar='"' ) | |
| ~FILE_OUTPUTFORMATTER () | |
| bool | Finish () override |
| Flushes the temp file to disk and atomically renames it over the final target path. | |
| virtual const char * | GetQuoteChar (const char *wrapee) const |
| Perform quote character need determination. | |
| int PRINTF_FUNC_N | Print (int nestLevel, const char *fmt,...) |
| Format and write text to the output stream. | |
| int PRINTF_FUNC | Print (const char *fmt,...) |
| Format and write text to the output stream. | |
| virtual std::string | Quotes (const std::string &aWrapee) const |
| Check aWrapee input string for a need to be quoted (e.g. | |
| std::string | Quotew (const wxString &aWrapee) const |
Protected Member Functions | |
| void | write (const char *aOutBuf, int aCount) override |
| Should be coded in the interface implementation (derived) classes. | |
Static Protected Member Functions | |
| static const char * | GetQuoteChar (const char *wrapee, const char *quote_char) |
| Perform quote character need determination according to the Specctra DSN specification. | |
Protected Attributes | |
| FILE * | m_fp |
| takes ownership; points at the temp file | |
| wxString | m_filename |
| final destination path | |
| wxString | m_tempPath |
| sibling temp file being written | |
| bool | m_committed |
| set true once Finish() has renamed into place | |
Private Member Functions | |
| int | sprint (const char *fmt,...) |
| int | vprint (const char *fmt, va_list ap) |
Private Attributes | |
| std::vector< char > | m_buffer |
| char | quoteChar [2] |
Used for text file output.
Writes through a sibling temp file and atomically renames onto the final target in Finish(). A crash, throw, or power loss between construction and Finish() leaves the final target byte-identical to its prior contents – never truncated. If Finish() is not called explicitly, the destructor attempts a best-effort commit and logs on failure.
It is about 8 times faster than STREAM_OUTPUTFORMATTER for file streams.
| FILE_OUTPUTFORMATTER::FILE_OUTPUTFORMATTER | ( | const wxString & | aFileName, |
| const wxChar * | aMode = wxT( "wt" ), | ||
| char | aQuoteChar = '"' ) |
| aFileName | is the full filename to open and save to as a text file. |
| aMode | is what you would pass to wxFopen()'s mode, defaults to wxT( "wt" ) for text files that are to be created here and now. |
| aQuoteChar | is a char used for quoting problematic strings (with whitespace or special characters in them). |
| IO_ERROR | if the sibling temp file cannot be created. |
Definition at line 625 of file richio.cpp.
References IO, m_committed, m_filename, m_fp, m_tempPath, KIPLATFORM::IO::OpenUniqueSiblingTempFile(), OUTPUTFMTBUFZ, OUTPUTFORMATTER::OUTPUTFORMATTER(), and THROW_IO_ERROR.
| FILE_OUTPUTFORMATTER::~FILE_OUTPUTFORMATTER | ( | ) |
Definition at line 640 of file richio.cpp.
References Finish(), m_committed, m_filename, m_fp, and m_tempPath.
|
overridevirtual |
Flushes the temp file to disk and atomically renames it over the final target path.
After a successful return the final target contains the bytes written; on failure the original contents remain intact.
| IO_ERROR | if fsync, close, or rename fails. |
Reimplemented from OUTPUTFORMATTER.
Definition at line 646 of file richio.cpp.
References m_committed, m_filename, m_fp, and m_tempPath.
Referenced by BOOST_AUTO_TEST_CASE(), BOARD_EDITOR_CONTROL::ExportNetlist(), DSN::SPECCTRA_DB::ExportPCB(), DSN::SPECCTRA_DB::ExportSESSION(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveDocFile(), SCH_IO_KICAD_LEGACY::SaveSchematicFile(), PANEL_REGULATOR::WriteDataFile(), NETLIST_EXPORTER_SPICE::WriteNetlist(), and ~FILE_OUTPUTFORMATTER().
|
virtualinherited |
Perform quote character need determination.
It returns the quote character as a single character string for a given input wrapee string. If the wrappee does not need to be quoted, the return value is "" (the null string), such as when there are no delimiters in the input wrapee string. If you want the quote_char to be assuredly not "", then pass in "(" as the wrappee.
Implementations are free to override the default behavior, which is to call the static function of the same name.
| wrapee | A string that might need wrapping on each end. |
Definition at line 382 of file richio.cpp.
References GetQuoteChar(), and quoteChar.
|
staticprotectedinherited |
Perform quote character need determination according to the Specctra DSN specification.
| wrapee | A string that might need wrapping on each end. |
| quote_char | A single character C string which provides the current quote character, should it be needed by the wrapee. |
Definition at line 348 of file richio.cpp.
Referenced by DSN::ANCESTOR::Format(), DSN::CIRCLE::Format(), DSN::CLASS::Format(), DSN::COMP_ORDER::Format(), DSN::COMPONENT::Format(), DSN::FROMTO::Format(), DSN::IMAGE::Format(), DSN::KEEPOUT::Format(), DSN::LAYER::Format(), DSN::LAYER_RULE::Format(), DSN::NET::Format(), DSN::NET_OUT::Format(), DSN::PADSTACK::Format(), DSN::PATH::Format(), DSN::PCB::Format(), DSN::PIN::Format(), DSN::PLACE::Format(), DSN::PROPERTY::Format(), DSN::QARC::Format(), DSN::RECTANGLE::Format(), DSN::SESSION::Format(), DSN::SPECCTRA_LAYER_PAIR::Format(), DSN::STRINGPROP::Format(), DSN::SUPPLY_PIN::Format(), DSN::VIA::Format(), DSN::WIRE::Format(), DSN::WIRE_VIA::Format(), DSN::CLASSES::FormatContents(), DSN::HISTORY::FormatContents(), DSN::PADSTACK::FormatContents(), DSN::PARSER::FormatContents(), DSN::REGION::FormatContents(), DSN::PIN_REF::FormatIt(), and GetQuoteChar().
|
inherited |
Format and write text to the output stream.
| fmt | A printf() style format string. |
| ... | a variable list of parameters that will get blended into the output under control of the format string. |
| IO_ERROR,if | there is a problem outputting, such as a full disk. |
Definition at line 455 of file richio.cpp.
|
inherited |
Format and write text to the output stream.
| nestLevel | The multiple of spaces to precede the output with. |
| fmt | A printf() style format string. |
| ... | a variable list of parameters that will get blended into the output under control of the format string. |
| IO_ERROR,if | there is a problem outputting, such as a full disk. |
Definition at line 426 of file richio.cpp.
References NESTWIDTH, result, sprint(), and vprint().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), CopySexprFile(), COMPONENT::Format(), COMPONENT_NET::Format(), DSN::ANCESTOR::Format(), DSN::BOUNDARY::Format(), DSN::CIRCLE::Format(), DSN::CLASS::Format(), DSN::COMP_ORDER::Format(), DSN::COMPONENT::Format(), DSN::CONTROL::Format(), DSN::ELEM::Format(), DSN::FROMTO::Format(), DSN::GRID::Format(), DSN::IMAGE::Format(), DSN::KEEPOUT::Format(), DSN::LAYER::Format(), DSN::LAYER_NOISE_WEIGHT::Format(), DSN::LAYER_RULE::Format(), DSN::NET::Format(), DSN::NET_OUT::Format(), DSN::PADSTACK::Format(), DSN::PATH::Format(), DSN::PCB::Format(), DSN::PIN::Format(), DSN::PLACE::Format(), DSN::POINT::Format(), DSN::PROPERTY::Format(), DSN::QARC::Format(), DSN::RECTANGLE::Format(), DSN::RULE::Format(), DSN::SESSION::Format(), DSN::SHAPE::Format(), DSN::SPECCTRA_LAYER_PAIR::Format(), DSN::STRINGPROP::Format(), DSN::SUPPLY_PIN::Format(), DSN::TOKPROP::Format(), DSN::UNIT_RES::Format(), DSN::VIA::Format(), DSN::WINDOW::Format(), DSN::WIRE::Format(), DSN::WIRE_VIA::Format(), EDA_TEXT::Format(), NETLIST::Format(), PAGE_INFO::Format(), PCB_CALCULATOR_DATAFILE::Format(), PCB_PLOT_PARAMS::Format(), STROKE_PARAMS::Format(), TEMPLATE_FIELDNAME::Format(), TEMPLATES::Format(), TITLE_BLOCK::Format(), XNODE::Format(), formatArc(), formatBezier(), BOARD_STACKUP::FormatBoardStackup(), KICAD_FORMAT::FormatBool(), formatCircle(), DSN::CLASSES::FormatContents(), DSN::HISTORY::FormatContents(), DSN::IMAGE::FormatContents(), DSN::PADSTACK::FormatContents(), DSN::PARSER::FormatContents(), DSN::PLACEMENT::FormatContents(), DSN::REGION::FormatContents(), DSN::ROUTE::FormatContents(), DSN::WAS_IS::FormatContents(), XNODE::FormatContents(), formatFill(), DSN::PIN_REF::FormatIt(), SCH_IO_KICAD_SEXPR_LIB_CACHE::formatLibraryHeader(), formatNode(), KICAD_FORMAT::FormatOptBool(), formatPoly(), formatRect(), KICAD_FORMAT::FormatStreamData(), KICAD_FORMAT::FormatUuid(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveBezier(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveCircle(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveDocFile(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveField(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveField(), SCH_IO_KICAD_LEGACY_LIB_CACHE::savePin(), SCH_IO_KICAD_SEXPR_LIB_CACHE::savePin(), SCH_IO_KICAD_LEGACY_LIB_CACHE::savePolyLine(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveRectangle(), SCH_IO_KICAD_LEGACY_LIB_CACHE::SaveSymbol(), SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveText(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveText(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveTextBox(), PANEL_REGULATOR::WriteDataFile(), NETLIST_EXPORTER_SPICE::WriteDirectives(), SPICE_CIRCUIT_MODEL::WriteDirectives(), EMBEDDED_FILES::WriteEmbeddedFiles(), NETLIST_EXPORTER_SPICE::WriteHead(), NETLIST_EXPORTER_SPICE_MODEL::WriteHead(), PCB_CALCULATOR_DATAFILE::WriteHeader(), NETLIST_EXPORTER_SPICE::writeInclude(), NETLIST_EXPORTER_SPICE::writeItems(), NETLIST_EXPORTER_SPICE::writeModels(), NETLIST_EXPORTER_SPICE::WriteTail(), and NETLIST_EXPORTER_SPICE_MODEL::WriteTail().
|
virtualinherited |
Check aWrapee input string for a need to be quoted (e.g.
contains a ')' character or a space), and for " double quotes within the string that need to be escaped such that the DSNLEXER will correctly parse the string from a file later.
| aWrapee | is a string that might need wrapping in double quotes, and it might need to have its internal content escaped, or not. |
| IO_ERROR,if | there is any kind of problem with the input string. |
Definition at line 472 of file richio.cpp.
Referenced by BOOST_AUTO_TEST_CASE(), formatNode(), Quotew(), and SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol().
|
inherited |
Definition at line 511 of file richio.cpp.
References Quotes().
Referenced by COMPONENT::Format(), COMPONENT_NET::Format(), EDA_TEXT::Format(), PAGE_INFO::Format(), PCB_CALCULATOR_DATAFILE::Format(), PCB_PLOT_PARAMS::Format(), TEMPLATE_FIELDNAME::Format(), TITLE_BLOCK::Format(), formatArc(), formatBezier(), BOARD_STACKUP::FormatBoardStackup(), formatCircle(), XNODE::FormatContents(), formatPoly(), formatRect(), KICAD_FORMAT::FormatUuid(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveField(), SCH_IO_KICAD_SEXPR_LIB_CACHE::savePin(), SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveText(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveTextBox(), EMBEDDED_FILES::WriteEmbeddedFiles(), and PCB_CALCULATOR_DATAFILE::WriteHeader().
|
privateinherited |
|
privateinherited |
|
overrideprotectedvirtual |
Should be coded in the interface implementation (derived) classes.
| aOutBuf | is the start of a byte buffer to write. |
| aCount | tells how many bytes to write. |
| IO_ERROR,if | there is a problem outputting, such as a full disk. |
Implements OUTPUTFORMATTER.
Definition at line 665 of file richio.cpp.
References m_fp, and THROW_IO_ERROR.
|
privateinherited |
Definition at line 407 of file richio.h.
Referenced by OUTPUTFORMATTER(), and vprint().
|
protected |
set true once Finish() has renamed into place
Definition at line 506 of file richio.h.
Referenced by FILE_OUTPUTFORMATTER(), Finish(), and ~FILE_OUTPUTFORMATTER().
|
protected |
final destination path
Definition at line 504 of file richio.h.
Referenced by FILE_OUTPUTFORMATTER(), Finish(), and ~FILE_OUTPUTFORMATTER().
|
protected |
takes ownership; points at the temp file
Definition at line 503 of file richio.h.
Referenced by FILE_OUTPUTFORMATTER(), Finish(), write(), and ~FILE_OUTPUTFORMATTER().
|
protected |
sibling temp file being written
Definition at line 505 of file richio.h.
Referenced by FILE_OUTPUTFORMATTER(), Finish(), and ~FILE_OUTPUTFORMATTER().
|
privateinherited |
Definition at line 408 of file richio.h.
Referenced by GetQuoteChar(), and OUTPUTFORMATTER().