Introduction
This document specifies the mxt file format. The mxt format is designed to mix diffent file formats in one text file. A pracitcal use case are situations there you must work with multiple text files that have different file formats.
Notation and Conventions
The extension of a mxt file should be .mxt.
The main structure in a mxt file is a list of chunks. A chunk is subdivided via a 'newline' into a header and content part.
The content represents the content of a text file that is embedded in the mxt file.
The header contains the name of the chunk and an optional comment section as information. Furthermore has a header the mxt specific elements marker, arrow and the optional salt for the next header.
A minimum header needs a marker, name and arrow element.
// name.of.chunk -->
The marker marks the end of the previous content and the begining of the header. It starts with '//' followed by a optional salt value that must match the salt of the previous header. All bytes till the next 'space' will be interpretet as marker.
The following name must be a 'word'. A 'word' is character sequence with unicode values > 'U+0020'.
The arrow element can be any 'word' that has the character sequence '-->' at the end and not inside the word.
//salt++++++++++++++++++++++++++ Σ-element ++++++++++++++++++++++++++++++++++-->
The optional comment in a header can span other several lines until it reaches an arrow element. Each of this lines must start with '//'. A parser should replace the the 'newline' and '//' with a simple 'space'. Lines that contain only a '//' at the start should be replaced with a 'newline'.
The following header should lead to the comment string 'This is the\ncomment.'.
// filename This // is the // // comment. //-------------->
The second optional element in the header is the salt value. It should be used if the content contains '//' at the beginning of a line. The salt value itself can be any 'word'.
-
newline = (U+000D)U+000A
-
// = U+002F U+002F
-
space = U+0020
-
--> = U+002D U+002D U+003E
-
word = * > U+0020
Example
The following example shows how a complete mxt file can look.
//---------------------------------------------------------------- user.json --> { "user": "alucard", "password": "C:SotN1997" } //--------------------------------------------------------------- connection.ini // comment line that is not part of the ini file, // comment lines will be joined with a space character // // empty comment lines will generate a newline character in the comment //-----------------------------------------------------------------------------> request: GET [url] schema=http host=localhost port=8080 path=/db/add // user.pgp --> XYZ -----BEGIN PGP MESSAGE----- hQEMA8p144+Gi+YpAQf/VeFG9Zb+8w9aldWll8n2g3jqpE613LKg2XAJgwXQmSQL R4O+TlQakJ+Mz5vM4IxxubPgYCyt6cyL7qM3oJIuk7vsqMbl5t7c/dOfXjj7goIC IskIX+9e5qrr8jRG/KZYSdBJtFEI9oNtZTLlnv3yeV3OWNTbUnjdTWrk/h1kavJE 5psOaTgH+Yg0utcF9Y0AqTo/o6EmiAn+uQlE5l9GTSzq51jRNiMoZRaXfUeznneF SDn/eFve7VlLV60j8LcXSrXgiIXEYi9ZgvWHHV+h9yorQXu24fgrEd0AhE/adiJm dzEHVCb+Q0i0p14hE2QQYdDE0zLxZN+FZJy/MiWwHtLA0QFZ+Zh47Zmiq14WyMPp 4ASQ/wNpwmZmpsiKDweUTlng3MTjifopmTeglPmRKsIOvUbTnA3yetznViugSYrA jPuSltUZpdLTrOPrOrbPorxKmurKmswZje1hoXIrpPN2KzTnA0UNH6GKOnMjLtRH uXMlS3q/GkIcXYDJIVFsEU3dGWMJFOtF4HPlyHmB8Gko8cDep6ugPbgJt8LBu3+p zE00pkAd4Kf7yodSUR6mRJm5qK+vqp7dnkZd/WhTNRihMoqRY2oKiH2rHjFSa76s D8nD4suo6ckVzYGJpknGSIAwaCFlW0aqR/3SWO4wi6ibbfub8LA73V90Ll3/S/Ph xU15HYmdCATnVX1sp1PWmyz972bMvl8txyIKMUueVw+w0C19ZTfWXjuFSguF7zt7 RY+I3to2lbyVJbcI9Dyz04GOJZ2vIhG9eq65FxeweAKDa7L+iH1NA5L2lYd9DEr1 ro/CU6vIqkOSNRUrNYDwqz1g3Z3eAQB/8t9Y4WsV4KL0M229rsFrtl26i7+quYfg uuTd =WxK9 -----END PGP MESSAGE----- //XYZ hello-world.h --> //---------------------------------------------------------- hello-world.c --> X // this is part of hello-world.c #include<stdio.h> int main(void) { printf("Hello World\n"); return 0; }
Implementations
A reference implementation in Lua is part of LuaZDF[1]