1/* autogenerated. */ 2/* src="transcode-tblgen.rb", len=28460, checksum=51276 */ 3/* src="newline.trans", len=3162, checksum=42485 */ 4 5#include "transcode_data.h" 6 7 8 9static const unsigned char 10newline_byte_array[516] = { 11#define universal_newline_offsets 0 120, 255, 13 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29 30#define crlf_newline_offsets 258 310, 255, 32 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 33 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48 49}; 50static const unsigned int 51newline_word_array[11] = { 52#define universal_newline_infos WORDINDEX2INFO(0) 53 FUNso, 54 55#define universal_newline WORDINDEX2INFO(1) 56 universal_newline_offsets, 57 universal_newline_infos, 58 59#define crlf_newline_infos WORDINDEX2INFO(3) 60 NOMAP, o2(0x0d,0x0a), 61 62#define crlf_newline WORDINDEX2INFO(5) 63 crlf_newline_offsets, 64 crlf_newline_infos, 65 66#define cr_newline_infos WORDINDEX2INFO(7) 67 NOMAP, o1(0x0d), 68 69#define cr_newline WORDINDEX2INFO(9) 70 crlf_newline_offsets, 71 cr_newline_infos, 72 73}; 74#define TRANSCODE_TABLE_INFO newline_byte_array, 516, newline_word_array, 11, ((int)sizeof(unsigned int)) 75 76 77#define STATE (sp[0]) 78#define NORMAL 0 79#define JUST_AFTER_CR 1 80 81/* no way to access this information, yet. */ 82#define NEWLINES_MET (sp[1]) 83#define MET_LF 0x01 84#define MET_CRLF 0x02 85#define MET_CR 0x04 86 87static int 88universal_newline_init(void *statep) 89{ 90 unsigned char *sp = statep; 91 STATE = NORMAL; 92 NEWLINES_MET = 0; 93 return 0; 94} 95 96static ssize_t 97fun_so_universal_newline(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize) 98{ 99 unsigned char *sp = statep; 100 int len; 101 if (s[0] == '\n') { 102 if (STATE == NORMAL) { 103 NEWLINES_MET |= MET_LF; 104 } 105 else { /* JUST_AFTER_CR */ 106 NEWLINES_MET |= MET_CRLF; 107 } 108 o[0] = '\n'; 109 len = 1; 110 STATE = NORMAL; 111 } 112 else { 113 len = 0; 114 if (STATE == JUST_AFTER_CR) { 115 o[0] = '\n'; 116 len = 1; 117 NEWLINES_MET |= MET_CR; 118 } 119 if (s[0] == '\r') { 120 STATE = JUST_AFTER_CR; 121 } 122 else { 123 o[len++] = s[0]; 124 STATE = NORMAL; 125 } 126 } 127 128 return len; 129} 130 131static ssize_t 132universal_newline_finish(void *statep, unsigned char *o, size_t osize) 133{ 134 unsigned char *sp = statep; 135 int len = 0; 136 if (STATE == JUST_AFTER_CR) { 137 o[0] = '\n'; 138 len = 1; 139 NEWLINES_MET |= MET_CR; 140 } 141 STATE = NORMAL; 142 return len; 143} 144 145static const rb_transcoder 146rb_universal_newline = { 147 "", "universal_newline", universal_newline, 148 TRANSCODE_TABLE_INFO, 149 1, /* input_unit_length */ 150 1, /* max_input */ 151 2, /* max_output */ 152 asciicompat_converter, /* asciicompat_type */ 153 2, universal_newline_init, universal_newline_init, /* state_size, state_init, state_fini */ 154 NULL, NULL, NULL, fun_so_universal_newline, 155 universal_newline_finish 156}; 157 158static const rb_transcoder 159rb_crlf_newline = { 160 "", "crlf_newline", crlf_newline, 161 TRANSCODE_TABLE_INFO, 162 1, /* input_unit_length */ 163 1, /* max_input */ 164 2, /* max_output */ 165 asciicompat_converter, /* asciicompat_type */ 166 0, NULL, NULL, /* state_size, state_init, state_fini */ 167 NULL, NULL, NULL, NULL 168}; 169 170static const rb_transcoder 171rb_cr_newline = { 172 "", "cr_newline", cr_newline, 173 TRANSCODE_TABLE_INFO, 174 1, /* input_unit_length */ 175 1, /* max_input */ 176 1, /* max_output */ 177 asciicompat_converter, /* asciicompat_type */ 178 0, NULL, NULL, /* state_size, state_init, state_fini */ 179 NULL, NULL, NULL, NULL 180}; 181 182void 183Init_newline(void) 184{ 185 rb_register_transcoder(&rb_universal_newline); 186 rb_register_transcoder(&rb_crlf_newline); 187 rb_register_transcoder(&rb_cr_newline); 188} 189 190