Fix MSVC inline errors when cmark is included in other sources that don't have the same set of disabled warnings
diff --git a/src/buffer.h b/src/buffer.h
index e99db72..88b79f3 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -48,7 +48,7 @@
 void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
                             const cmark_strbuf *buf);
 
-static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) {
+CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) {
   return (char *)buf->ptr;
 }
 
@@ -75,14 +75,14 @@
 /* Print error and abort. */
 void cmark_strbuf_overflow_err(void);
 
-static inline bufsize_t cmark_strbuf_check_bufsize(size_t size) {
+CMARK_INLINE bufsize_t cmark_strbuf_check_bufsize(size_t size) {
   if (size > BUFSIZE_MAX) {
     cmark_strbuf_overflow_err();
   }
   return (bufsize_t)size;
 }
 
-static inline bufsize_t cmark_strbuf_safe_strlen(const char *str) {
+CMARK_INLINE bufsize_t cmark_strbuf_safe_strlen(const char *str) {
   return cmark_strbuf_check_bufsize(strlen(str));
 }
 
diff --git a/src/chunk.h b/src/chunk.h
index db1bf0d..90cf568 100644
--- a/src/chunk.h
+++ b/src/chunk.h
@@ -16,7 +16,7 @@
   bufsize_t alloc; // also implies a NULL-terminated string
 } cmark_chunk;
 
-static inline void cmark_chunk_free(cmark_chunk *c) {
+CMARK_INLINE void cmark_chunk_free(cmark_chunk *c) {
   if (c->alloc)
     free(c->data);
 
@@ -25,7 +25,7 @@
   c->len = 0;
 }
 
-static inline void cmark_chunk_ltrim(cmark_chunk *c) {
+CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) {
   assert(!c->alloc);
 
   while (c->len && cmark_isspace(c->data[0])) {
@@ -34,7 +34,7 @@
   }
 }
 
-static inline void cmark_chunk_rtrim(cmark_chunk *c) {
+CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) {
   while (c->len > 0) {
     if (!cmark_isspace(c->data[c->len - 1]))
       break;
@@ -43,19 +43,19 @@
   }
 }
 
-static inline void cmark_chunk_trim(cmark_chunk *c) {
+CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) {
   cmark_chunk_ltrim(c);
   cmark_chunk_rtrim(c);
 }
 
-static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c,
+CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c,
                                            bufsize_t offset) {
   const unsigned char *p =
       (unsigned char *)memchr(ch->data + offset, c, ch->len - offset);
   return p ? (bufsize_t)(p - ch->data) : ch->len;
 }
 
-static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) {
+CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_chunk *c) {
   unsigned char *str;
 
   if (c->alloc) {
@@ -74,7 +74,7 @@
   return (char *)str;
 }
 
-static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) {
+CMARK_INLINE void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) {
   if (c->alloc) {
     free(c->data);
   }
@@ -90,19 +90,19 @@
   }
 }
 
-static inline cmark_chunk cmark_chunk_literal(const char *data) {
+CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) {
   bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0;
   cmark_chunk c = {(unsigned char *)data, len, 0};
   return c;
 }
 
-static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos,
+CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos,
                                           bufsize_t len) {
   cmark_chunk c = {ch->data + pos, len, 0};
   return c;
 }
 
-static inline cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) {
+CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) {
   cmark_chunk c;
 
   c.len = buf->size;
diff --git a/src/config.h.in b/src/config.h.in
index 5294bc9..a392111 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -15,3 +15,11 @@
 #else
   #define CMARK_ATTRIBUTE(list)
 #endif
+
+#ifndef CMARK_INLINE
+  #ifdef _MSC_VER
+    #define CMARK_INLINE __inline
+  #else
+    #define CMARK_INLINE static inline
+  #endif
+#endif