Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,12 @@ endif ()

# Need to build parser.c via greg

add_custom_target(
greg
COMMAND make
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/submodules/greg
add_subdirectory (${PROJECT_SOURCE_DIR}/submodules/greg
)

add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/parser.c
COMMAND ${PROJECT_SOURCE_DIR}/submodules/greg/greg -o ${CMAKE_CURRENT_BINARY_DIR}/parser.c ${PROJECT_SOURCE_DIR}/src/parser.leg
COMMAND $<TARGET_FILE:greg> -o ${CMAKE_CURRENT_BINARY_DIR}/parser.c ${PROJECT_SOURCE_DIR}/src/parser.leg
DEPENDS greg
)

Expand Down Expand Up @@ -419,6 +416,14 @@ set_target_properties(multimarkdown PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH
# Link the library to the app
target_link_libraries(multimarkdown libMultiMarkdown)

if (WIN32)
find_library (GETOPT wingetopt
)
target_link_libraries (multimarkdown wingetopt
)
include_directories (${PROJECT_SOURCE_DIR}/submodules/greg/MSVC
)
endif()

# ==========================
# Build Installer with CPack
Expand Down
38 changes: 19 additions & 19 deletions src/GLibFacade.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,25 +49,25 @@
*/

/* Solaris and Windows do not provide vasprintf() or asprintf(). */
#if defined(__WIN32) || (defined(__SVR4) && defined(__sun))
int vasprintf( char **sptr, char *fmt, va_list argv )
{
int wanted = vsnprintf( *sptr = NULL, 0, fmt, argv );
if( (wanted > 0) && ((*sptr = malloc( 1 + wanted )) != NULL) )
return vsprintf( *sptr, fmt, argv );
return wanted;
}
int asprintf( char **sptr, char *fmt, ... )
{
int retval;
va_list argv;
va_start( argv, fmt );
retval = vasprintf( sptr, fmt, argv );
va_end( argv );
return retval;
}
#if defined(__WIN32) || defined(_WIN32) || (defined(__SVR4) && defined(__sun))
int vasprintf( char **sptr, char *fmt, va_list argv )
{
int wanted = vsnprintf( *sptr = NULL, 0, fmt, argv );
if( (wanted > 0) && ((*sptr = malloc( 1 + wanted )) != NULL) )
return vsprintf( *sptr, fmt, argv );

return wanted;
}

int asprintf( char **sptr, char *fmt, ... )
{
int retval;
va_list argv;
va_start( argv, fmt );
retval = vasprintf( sptr, fmt, argv );
va_end( argv );
return retval;
}
#endif


Expand Down
38 changes: 20 additions & 18 deletions src/GLibFacade.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,9 @@
#ifndef __MARKDOWN_GLIB_FACADE__
#define __MARKDOWN_GLIB_FACADE__

/* peg_markdown uses the link symbol for its own purposes */
#define link MARKDOWN_LINK_IGNORED
#include <unistd.h>
#undef link

#include <stdbool.h>
#include <ctype.h>
#include <string.h>

typedef int gboolean;
typedef char gchar;
Expand All @@ -51,15 +47,21 @@ typedef char gchar;
#define TRUE true
#endif

/* WE implement minimal mirror implementations of GLib's GString and GSList
#ifdef _WIN32
#define DllExport __declspec( dllexport )
#else
#define DllExport
#endif

/* WE implement minimal mirror implementations of GLib's GString and GSList
* sufficient to cover the functionality required by MultiMarkdown.
*
* NOTE: THese are 100% clean, from-scratch implementations using only the
* GLib function prototype as guide for behavior.
*/

typedef struct
{
typedef struct DllExport
{
/* Current UTF8 byte stream this string represents */
char* str;

Expand All @@ -69,21 +71,21 @@ typedef struct
unsigned long currentStringLength;
} GString;

GString* g_string_new(const char *startingString);
char* g_string_free(GString* ripString, bool freeCharacterData);
DllExport GString* g_string_new(const char *startingString);
DllExport char* g_string_free(GString* ripString, bool freeCharacterData);

void g_string_append_c(GString* baseString, char appendedCharacter);
void g_string_append(GString* baseString, char *appendedString);
DllExport void g_string_append_c(GString* baseString, char appendedCharacter);
DllExport void g_string_append(GString* baseString, char *appendedString);

void g_string_prepend(GString* baseString, char* prependedString);
DllExport void g_string_prepend(GString* baseString, char* prependedString);

void g_string_append_printf(GString* baseString, char* format, ...);
DllExport void g_string_append_printf(GString* baseString, char* format, ...);

void g_string_insert(GString* baseString, size_t pos, char * insertedString);
void g_string_insert_c(GString* baseString, size_t pos, char insertedCharacter);
void g_string_insert_printf(GString* baseString, size_t pos, char* format, ...);
DllExport void g_string_insert(GString* baseString, size_t pos, char * insertedString);
DllExport void g_string_insert_c(GString* baseString, size_t pos, char insertedCharacter);
DllExport void g_string_insert_printf(GString* baseString, size_t pos, char* format, ...);

void g_string_erase(GString* baseString, size_t pos, size_t len);
DllExport void g_string_erase(GString* baseString, size_t pos, size_t len);

/* Just implement a very simple singly linked list. */

Expand Down
16 changes: 11 additions & 5 deletions src/libMultiMarkdown.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,44 +61,50 @@
#ifndef LIB_MULTIMARKDOWN_H
#define LIB_MULTIMARKDOWN_H

#ifdef _WIN32
#define DllExport __declspec( dllexport )
#else
#define DllExport
#endif

#include <stdbool.h>

/* Main API commands */

/// Convert source string to output string, based on provided `parser_extensions`
/// and requested `export_format`.
/// The returned `char *` will need to be freed after it is no longer needed.
char * markdown_to_string(
DllExport char * markdown_to_string(
const char * source, //!< Pointer to c-string of the source text
unsigned long extensions, //!< Bit field of parser_extensions
int format //!< Specify export_format to be used
);

/// Does the source string have metadata, using provided `parser_extensions`?
///
bool has_metadata(
DllExport bool has_metadata(
const char *source, //!< Pointer to c-string of the source text
unsigned long extensions //!< Bit field of parser_extensions
);

/// List all metadata keys, using provided `parser_extensions`.
/// The returned `char *` will need to be freed after it is no longer needed.
char * extract_metadata_keys(
DllExport char * extract_metadata_keys(
const char *source, //!< Pointer to c-string of the source text
unsigned long extensions //!< Bit field of parser_extensions
);

/// Extract the value for the specified metadata key, using provided `parser_extensions`.
/// The returned `char *` will need to be freed after it is no longer needed.
char * extract_metadata_value(
DllExport char * extract_metadata_value(
const char *source, //!< Pointer to c-string of the source text
unsigned long extensions, //!< Bit field of parser_extensions
char *key //!< C-string of the key we need to find
);

/// Return the version string for this build of libMultiMarkdown
/// The returned `char *` will need to be freed after it is no longer needed.
char * mmd_version(void);
DllExport char * mmd_version(void);


/// These are the basic extensions that enable or disable MultiMarkdown features
Expand Down
20 changes: 19 additions & 1 deletion src/multimarkdown.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,29 @@


#include <getopt.h>
#include <libgen.h>
#include "parser.h"
#include "transclude.h"
#include "version.h"

#ifndef _WIN32

#include <libgen.h>

#else

#define strdup _strdup
#define setmode _setmode
#define fileno _fileno

static char* dirname(char* path)
{
static char dir[512];
_splitpath(path, NULL, dir, NULL, NULL);
return dir;
}

#endif

/// main()
int main(int argc, char **argv)
{
Expand Down
1 change: 0 additions & 1 deletion src/parse_utilities.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

#include "parser.h"
#include "version.h"
#include <libgen.h>

#pragma mark - Parse Tree

Expand Down
Loading