version 1.4, 2008/12/04 16:19:52 |
version 1.5, 2008/12/04 19:31:57 |
|
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
* PERFORMANCE OF THIS SOFTWARE. |
* PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
|
#include <assert.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
|
|
|
|
ml_nputstring(struct md_mbuf *p, |
ml_nputstring(struct md_mbuf *p, |
const char *buf, size_t sz, size_t *pos) |
const char *buf, size_t sz, size_t *pos) |
{ |
{ |
int i; |
int i, v; |
const char *seq; |
const char *seq; |
size_t ssz; |
size_t ssz; |
|
|
for (i = 0; i < (int)sz; i++) { |
for (i = 0; i < (int)sz; i++) { |
switch (buf[i]) { |
switch (buf[i]) { |
|
|
|
/* Escaped value. */ |
|
case ('\\'): |
|
if (-1 == (v = rofftok_scan(buf, &i))) { |
|
/* TODO: error. */ |
|
return(0); |
|
} |
|
|
|
switch (v) { |
|
case (ROFFTok_Sp_A): |
|
seq = "\\a"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_B): |
|
seq = "\\b"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_F): |
|
seq = "\\f"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_N): |
|
seq = "\\n"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_R): |
|
seq = "\\r"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_T): |
|
seq = "\\t"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_V): |
|
seq = "\\v"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Sp_0): |
|
seq = "\\0"; |
|
ssz = 2; |
|
break; |
|
case (ROFFTok_Space): |
|
seq = " "; |
|
ssz = 6; |
|
break; |
|
case (ROFFTok_Hyphen): |
|
seq = "‐"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Em): |
|
seq = "—"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_En): |
|
seq = "–"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Ge): |
|
seq = "≥"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Le): |
|
seq = "≤"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Rquote): |
|
seq = "”"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Lquote): |
|
seq = "“"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Uparrow): |
|
seq = "↑"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Acute): |
|
seq = "´"; |
|
ssz = 6; |
|
break; |
|
case (ROFFTok_Grave): |
|
seq = "`"; |
|
ssz = 5; |
|
break; |
|
case (ROFFTok_Pi): |
|
seq = "π"; |
|
ssz = 6; |
|
break; |
|
case (ROFFTok_Ne): |
|
seq = "≠"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Lt): |
|
seq = "<"; |
|
ssz = 4; |
|
break; |
|
case (ROFFTok_Gt): |
|
seq = ">"; |
|
ssz = 4; |
|
break; |
|
case (ROFFTok_Plusmin): |
|
seq = "±"; |
|
ssz = 6; |
|
break; |
|
case (ROFFTok_Infty): |
|
seq = "∞"; |
|
ssz = 7; |
|
break; |
|
case (ROFFTok_Bar): |
|
seq = "|"; |
|
ssz = 6; |
|
break; |
|
case (ROFFTok_Nan): |
|
seq = "Nan"; |
|
ssz = 3; |
|
break; |
|
case (ROFFTok_Quote): |
|
seq = """; |
|
ssz = 6; |
|
break; |
|
case (ROFFTok_Slash): |
|
seq = "\\"; |
|
ssz = 1; |
|
break; |
|
case (ROFFTok_Null): |
|
seq = ""; |
|
ssz = 0; |
|
break; |
|
default: |
|
/* TODO: print error. */ |
|
return(-1); |
|
} |
|
break; |
|
|
/* Ampersand ml-escape. */ |
/* Ampersand ml-escape. */ |
case ('&'): |
case ('&'): |
seq = "&"; |
seq = "&"; |
Line 70 ml_nputstring(struct md_mbuf *p, |
|
Line 205 ml_nputstring(struct md_mbuf *p, |
|
break; |
break; |
} |
} |
|
|
if ( ! ml_nputs(p, seq, ssz, pos)) |
if (ssz > 0 && ! ml_nputs(p, seq, ssz, pos)) |
return(-1); |
return(-1); |
} |
} |
return(1); |
return(1); |