int PonscripterLabel::processText() { if (string_buffer_restore > 0) { string_buffer_offset = string_buffer_restore; string_buffer_restore = -1; } if (debug_level > 1) { fprintf(stderr,"processText: %d:'%s", string_buffer_offset, script_h.getStrBuf(string_buffer_offset)); } if (event_mode & (WAIT_INPUT_MODE | WAIT_SLEEP_MODE)) { draw_cursor_flag = false; if (script_h.readStrBuf(string_buffer_offset) == '!') { string_buffer_offset++; if (script_h.readStrBuf(string_buffer_offset) == 'w' || script_h.readStrBuf(string_buffer_offset) == 'd') { ++string_buffer_offset; while (script_h.isadigit(script_h.readStrBuf(string_buffer_offset))) { ++string_buffer_offset; } while (script_h.isawspace(script_h.readStrBuf(string_buffer_offset))) ++string_buffer_offset; } } else if (clickstr_state == CLICK_WAIT) { string_buffer_offset += file_encoding->NextCharSizeWithLigatures (script_h.getStrBuf(string_buffer_offset), &sentence_font); clickstr_state = CLICK_NONE; } else if (clickstr_state == CLICK_NEWPAGE) { event_mode = IDLE_EVENT_MODE; string_buffer_offset += file_encoding->NextCharSizeWithLigatures (script_h.getStrBuf(string_buffer_offset), &sentence_font); newPage(true); clickstr_state = CLICK_NONE; return RET_CONTINUE | RET_NOREAD; } else string_buffer_offset += file_encoding->NextCharSizeWithLigatures (script_h.getStrBuf(string_buffer_offset), &sentence_font); event_mode = IDLE_EVENT_MODE; } if (script_h.readStrBuf(string_buffer_offset) == 0x0a || script_h.readStrBuf(string_buffer_offset) == 0x00) { indent_offset = 0; // redundant skip_to_wait = 0; return RET_CONTINUE; } new_line_skip_flag = false; char ch = script_h.readStrBuf(string_buffer_offset); // Chronotrig, multilang inline command hack, ignore ! and # commands when current language isn't being read if (current_read_language != -1 && current_read_language != current_language) { int startingChar = string_buffer_offset; if (ch == '!') { string_buffer_offset++; if (script_h.readStrBuf(string_buffer_offset) == 'w' || script_h.readStrBuf(string_buffer_offset) == 'd') { ++string_buffer_offset; while (script_h.isadigit(script_h.readStrBuf(string_buffer_offset))) { ++string_buffer_offset; } while (script_h.isawspace(script_h.readStrBuf(string_buffer_offset))) ++string_buffer_offset; } else if (script_h.readStrBuf(string_buffer_offset) == 's') { string_buffer_offset++; if (script_h.readStrBuf(string_buffer_offset) == 'd') { string_buffer_offset++; } else { while (script_h.isadigit(script_h.readStrBuf(string_buffer_offset))) { ++string_buffer_offset; } while (script_h.isawspace(script_h.readStrBuf(string_buffer_offset))) ++string_buffer_offset; } } if (string_buffer_offset - startingChar > 3) { return RET_CONTINUE; } else { string_buffer_offset = startingChar; } } else if (ch == '#') { char hexchecker; bool isValidHex = true; for (int i = 0; i <= 5; ++i) { hexchecker = script_h.readStrBuf(string_buffer_offset + i + 1); if (!script_h.isaxdigit(hexchecker)) { isValidHex = false; } } if (isValidHex) { string_buffer_offset += 7; return RET_CONTINUE; } } } if (ch == '@') { // wait for click return clickWait(false); } else if (ch == '\\') { // new page return clickNewPage(false); } else if (ch == '_') { // Ignore following forced return clickstr_state = CLICK_IGNORE; ++string_buffer_offset; return RET_CONTINUE | RET_NOREAD; } else if (ch == '!') { ++string_buffer_offset; if (script_h.readStrBuf(string_buffer_offset) == 's') { ++string_buffer_offset; bool in_skip = (skip_flag || ctrl_pressed_status); int prev_t = sentence_font.wait_time; if (script_h.readStrBuf(string_buffer_offset) == 'd') { sentence_font.wait_time = -1; ++string_buffer_offset; } else { int t = 0; while (script_h.isadigit(script_h.readStrBuf(string_buffer_offset))) { t = t * 10 + script_h.readStrBuf(string_buffer_offset) -'0'; ++string_buffer_offset; } sentence_font.wait_time = t; while (script_h.isawspace(script_h.readStrBuf(string_buffer_offset))) ++string_buffer_offset; } if (!in_skip && (prev_t == 0) && (sentence_font.wait_time != 0)) flush(refreshMode()); } else if (script_h.readStrBuf(string_buffer_offset) == 'w' || script_h.readStrBuf(string_buffer_offset) == 'd') { bool flag = false; bool in_skip = (skip_flag || draw_one_page_flag || ctrl_pressed_status); if (script_h.readStrBuf(string_buffer_offset) == 'd') flag = true; ++string_buffer_offset; int tmp_string_buffer_offset = string_buffer_offset; int t = 0; while (script_h.isadigit(script_h.readStrBuf(string_buffer_offset))) { t = t * 10 + script_h.readStrBuf(string_buffer_offset) - '0'; ++string_buffer_offset; } while (script_h.isawspace(script_h.readStrBuf(string_buffer_offset))) string_buffer_offset++; flush(refreshMode()); if (flag && in_skip) { skip_to_wait = 0; return RET_CONTINUE | RET_NOREAD; } else { if (!flag && in_skip) { //Mion: instead of skipping entirely, let's do a shortened wait (safer) if (t > 100) { t = t / 10; } else if (t > 10) { t = 10; } } skip_to_wait = 0; event_mode = WAIT_SLEEP_MODE; if (flag) event_mode |= WAIT_INPUT_MODE; key_pressed_flag = false; startTimer(t); string_buffer_offset = tmp_string_buffer_offset - 2; return RET_WAIT | RET_NOREAD; } } else { --string_buffer_offset; goto notacommand; } return RET_CONTINUE | RET_NOREAD; } else if (ch == '#') { char hexchecker; for (int i = 0; i <= 5; ++i) { hexchecker = script_h.readStrBuf(string_buffer_offset + i + 1); if (!script_h.isaxdigit(hexchecker)) goto notacommand; } sentence_font.color = readColour(script_h.getStrBuf(string_buffer_offset)); string_buffer_offset += 7; return RET_CONTINUE | RET_NOREAD; } else if (ch == '/') { if (script_h.readStrBuf(string_buffer_offset + 1) != 0x0a) goto notacommand; else { // skip new line new_line_skip_flag = true; string_buffer_offset++; return RET_CONTINUE; // skip the following eol } } else { notacommand: if (clickstr_state == CLICK_IGNORE) { clickstr_state = CLICK_NONE; } else { const char* c = script_h.getStrBuf(string_buffer_offset); if (script_h.checkClickstr(c)) { if (sentence_font.isNoRoomForLines(clickstr_line)) return clickNewPage(true); else return clickWait(true); } } bool flush_flag = !(skip_flag || draw_one_page_flag || skip_to_wait || ctrl_pressed_status || (sentence_font.wait_time == 0) || (current_read_language != -1 && current_read_language != current_language)); drawChar(script_h.getStrBuf(string_buffer_offset), &sentence_font, flush_flag, true, accumulation_surface, &text_info); ++num_chars_in_sentence; if (flush_flag) { event_mode = WAIT_SLEEP_MODE; int wait_time = 0; if ( sentence_font.wait_time == -1 ) wait_time = default_text_speed[text_speed_no]; else wait_time = sentence_font.wait_time; advancePhase(wait_time * 100 / global_speed_modifier); return RET_WAIT | RET_NOREAD; } event_mode = IDLE_EVENT_MODE; //Mion: hack using RET_CONTINUE | RET_WAIT for unflushed text return RET_CONTINUE | RET_WAIT | RET_NOREAD; } return RET_NOMATCH; }
bool ONScripter::processText() { //printf("textCommand %c %d %d %d\n", script_h.getStringBuffer()[ string_buffer_offset ], string_buffer_offset, event_mode, line_enter_status); char out_text[3]= {'\0', '\0', '\0'}; //printf("*** textCommand %d (%d,%d)\n", string_buffer_offset, sentence_font.xy[0], sentence_font.xy[1]); while( (!(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) && script_h.getStringBuffer()[ string_buffer_offset ] == ' ') || script_h.getStringBuffer()[ string_buffer_offset ] == '\t' ) string_buffer_offset ++; if (script_h.getStringBuffer()[string_buffer_offset] == 0x00){ processEOT(); return false; } new_line_skip_flag = false; char ch = script_h.getStringBuffer()[string_buffer_offset]; if ( IS_TWO_BYTE(ch) ){ // Shift jis /* ---------------------------------------- */ /* Kinsoku process */ if ( checkLineBreak( script_h.getStringBuffer() + string_buffer_offset, &sentence_font ) ){ sentence_font.newLine(); current_page->add(0x0a); for (int i=0 ; i<indent_offset ; i++){ current_page->add(0x81); current_page->add(0x40); sentence_font.advanceCharInHankaku(2); } } out_text[0] = script_h.getStringBuffer()[string_buffer_offset]; out_text[1] = script_h.getStringBuffer()[string_buffer_offset+1]; if (script_h.checkClickstr(&script_h.getStringBuffer()[string_buffer_offset]) > 0){ if (sentence_font.getRemainingLine() <= clickstr_line) return clickNewPage( out_text ); else return clickWait( out_text ); } else{ clickstr_state = CLICK_NONE; } if ( skip_mode || ctrl_pressed_status ){ drawChar( out_text, &sentence_font, false, true, accumulation_surface, &text_info ); } else{ drawChar( out_text, &sentence_font, true, true, accumulation_surface, &text_info ); event_mode = WAIT_TIMER_MODE | WAIT_INPUT_MODE; if ( sentence_font.wait_time == -1 ) waitEvent( default_text_speed[text_speed_no] ); else waitEvent( sentence_font.wait_time ); } num_chars_in_sentence++; string_buffer_offset += 2; return true; } else if ( ch == '@' ){ // wait for click return clickWait( NULL ); } else if ( ch == '\\' ){ // new page return clickNewPage( NULL ); } else if ( ch == '_' ){ // Ignore an immediate click wait string_buffer_offset++; int matched_len = script_h.checkClickstr(script_h.getStringBuffer() + string_buffer_offset, true); if (matched_len > 0){ out_text[0] = script_h.getStringBuffer()[string_buffer_offset]; if (out_text[0] != '@' && out_text[0] != '\\'){ if (matched_len == 2) out_text[1] = script_h.getStringBuffer()[string_buffer_offset+1]; bool flush_flag = true; if ( skip_mode || ctrl_pressed_status ) flush_flag = false; drawChar( out_text, &sentence_font, flush_flag, true, accumulation_surface, &text_info ); } string_buffer_offset += matched_len; } return true; } else if ( ch == '!' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ string_buffer_offset++; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 's' ){ string_buffer_offset++; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ){ sentence_font.wait_time = -1; string_buffer_offset++; } else{ int t = 0; while( script_h.getStringBuffer()[ string_buffer_offset ] >= '0' && script_h.getStringBuffer()[ string_buffer_offset ] <= '9' ){ t = t*10 + script_h.getStringBuffer()[ string_buffer_offset ] - '0'; string_buffer_offset++; } sentence_font.wait_time = t; while (script_h.getStringBuffer()[ string_buffer_offset ] == ' ' || script_h.getStringBuffer()[ string_buffer_offset ] == '\t') string_buffer_offset++; } } else if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'w' || script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ){ bool flag = false; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ) flag = true; string_buffer_offset++; int t = 0; while( script_h.getStringBuffer()[ string_buffer_offset ] >= '0' && script_h.getStringBuffer()[ string_buffer_offset ] <= '9' ){ t = t*10 + script_h.getStringBuffer()[ string_buffer_offset ] - '0'; string_buffer_offset++; } while (script_h.getStringBuffer()[ string_buffer_offset ] == ' ' || script_h.getStringBuffer()[ string_buffer_offset ] == '\t') string_buffer_offset++; if (!skip_mode && !ctrl_pressed_status){ event_mode = WAIT_TIMER_MODE; if (flag) event_mode |= WAIT_INPUT_MODE; waitEvent(t); } } return true; } else if ( ch == '#' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ readColor( &sentence_font.color, script_h.getStringBuffer() + string_buffer_offset ); readColor( &ruby_font.color, script_h.getStringBuffer() + string_buffer_offset ); string_buffer_offset += 7; return true; } else if ( ch == '(' && (!english_mode || !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)) ){ current_page->add('('); startRuby( script_h.getStringBuffer() + string_buffer_offset + 1, sentence_font ); string_buffer_offset++; return true; } else if ( ch == '/' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ if ( ruby_struct.stage == RubyStruct::BODY ){ current_page->add('/'); sentence_font.addLineOffset(ruby_struct.margin); string_buffer_offset = ruby_struct.ruby_end - script_h.getStringBuffer(); if (*ruby_struct.ruby_end == ')'){ if ( skip_mode || ctrl_pressed_status ) endRuby(false, true, accumulation_surface, &text_info); else endRuby(true, true, accumulation_surface, &text_info); current_page->add(')'); string_buffer_offset++; } return true; } else{ // skip new line new_line_skip_flag = true; string_buffer_offset++; if (script_h.getStringBuffer()[string_buffer_offset] != 0x00) errorAndExit( "'new line' must follow '/'." ); return true; // skip the following eol } } else if ( ch == ')' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) && ruby_struct.stage == RubyStruct::BODY ){ current_page->add(')'); string_buffer_offset++; ruby_struct.stage = RubyStruct::NONE; return true; } else if ( ch == '<' && (!english_mode || !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)) ){ current_page->add('<'); string_buffer_offset++; int no = 0; while(script_h.getStringBuffer()[string_buffer_offset]>='0' && script_h.getStringBuffer()[string_buffer_offset]<='9'){ current_page->add(script_h.getStringBuffer()[string_buffer_offset]); no=no*10+script_h.getStringBuffer()[string_buffer_offset++]-'0'; } in_textbtn_flag = true; return true; } else if ( ch == '>' && in_textbtn_flag && (!english_mode || !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)) ){ current_page->add('>'); string_buffer_offset++; in_textbtn_flag = false; return true; } else{ out_text[0] = ch; int matched_len = script_h.checkClickstr(script_h.getStringBuffer() + string_buffer_offset); if (matched_len > 0){ if (matched_len == 2) out_text[1] = script_h.getStringBuffer()[ string_buffer_offset + 1 ]; if (sentence_font.getRemainingLine() <= clickstr_line) return clickNewPage( out_text ); else return clickWait( out_text ); } else if (script_h.getStringBuffer()[ string_buffer_offset + 1 ] && script_h.checkClickstr(&script_h.getStringBuffer()[string_buffer_offset+1]) == 1 && script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR){ if ( script_h.getStringBuffer()[ string_buffer_offset + 2 ] && script_h.checkClickstr(&script_h.getStringBuffer()[string_buffer_offset+2]) > 0){ clickstr_state = CLICK_NONE; } else if (script_h.getStringBuffer()[ string_buffer_offset + 1 ] == '@'){ return clickWait( out_text ); } else if (script_h.getStringBuffer()[ string_buffer_offset + 1 ] == '\\'){ return clickNewPage( out_text ); } else{ out_text[1] = script_h.getStringBuffer()[ string_buffer_offset + 1 ]; if (sentence_font.getRemainingLine() <= clickstr_line) return clickNewPage( out_text ); else return clickWait( out_text ); } } else{ clickstr_state = CLICK_NONE; } bool flush_flag = true; if ( skip_mode || ctrl_pressed_status ) flush_flag = false; if ( script_h.getStringBuffer()[ string_buffer_offset + 1 ] && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)){ out_text[1] = script_h.getStringBuffer()[ string_buffer_offset + 1 ]; drawChar( out_text, &sentence_font, flush_flag, true, accumulation_surface, &text_info ); num_chars_in_sentence++; } else if (script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR){ drawChar( out_text, &sentence_font, flush_flag, true, accumulation_surface, &text_info ); num_chars_in_sentence++; } if (!skip_mode && !ctrl_pressed_status){ event_mode = WAIT_TIMER_MODE | WAIT_INPUT_MODE; if ( sentence_font.wait_time == -1 ) waitEvent( default_text_speed[text_speed_no] ); else waitEvent( sentence_font.wait_time ); } if ( script_h.getStringBuffer()[ string_buffer_offset + 1 ] && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)) string_buffer_offset++; string_buffer_offset++; return true; } return false; }
int ONScripterLabel::processText() { //printf("textCommand %c %d %d %d\n", script_h.getStringBuffer()[ string_buffer_offset ], string_buffer_offset, event_mode, line_enter_status); char out_text[3]= {'\0', '\0', '\0'}; if ( event_mode & (WAIT_INPUT_MODE | WAIT_SLEEP_MODE) ){ draw_cursor_flag = false; if ( clickstr_state == CLICK_WAIT ){ if (script_h.checkClickstr(script_h.getStringBuffer() + string_buffer_offset) != 1) string_buffer_offset++; string_buffer_offset++; clickstr_state = CLICK_NONE; } else if ( clickstr_state == CLICK_NEWPAGE ){ event_mode = IDLE_EVENT_MODE; if (script_h.checkClickstr(script_h.getStringBuffer() + string_buffer_offset) != 1) string_buffer_offset++; string_buffer_offset++; newPage( true ); clickstr_state = CLICK_NONE; return RET_CONTINUE | RET_NOREAD; } else if ( IS_TWO_BYTE(script_h.getStringBuffer()[ string_buffer_offset ]) ){ string_buffer_offset += 2; } else if ( script_h.getStringBuffer()[ string_buffer_offset ] == '!' ){ string_buffer_offset++; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'w' || script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ){ string_buffer_offset++; while ( script_h.getStringBuffer()[ string_buffer_offset ] >= '0' && script_h.getStringBuffer()[ string_buffer_offset ] <= '9' ) string_buffer_offset++; while (script_h.getStringBuffer()[ string_buffer_offset ] == ' ' || script_h.getStringBuffer()[ string_buffer_offset ] == '\t') string_buffer_offset++; } } else if ( script_h.getStringBuffer()[ string_buffer_offset + 1 ] && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ string_buffer_offset += 2; } else string_buffer_offset++; event_mode = IDLE_EVENT_MODE; } if (script_h.getStringBuffer()[string_buffer_offset] == 0x0a || script_h.getStringBuffer()[string_buffer_offset] == 0x00){ indent_offset = 0; // redundant return RET_CONTINUE; } new_line_skip_flag = false; //printf("*** textCommand %d (%d,%d)\n", string_buffer_offset, sentence_font.xy[0], sentence_font.xy[1]); while( (!(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) && script_h.getStringBuffer()[ string_buffer_offset ] == ' ') || script_h.getStringBuffer()[ string_buffer_offset ] == '\t' ) string_buffer_offset ++; char ch = script_h.getStringBuffer()[string_buffer_offset]; if ( IS_TWO_BYTE(ch) ){ // Shift jis /* ---------------------------------------- */ /* Kinsoku process */ if (IS_KINSOKU( script_h.getStringBuffer() + string_buffer_offset + 2)){ int i = 2; while (!sentence_font.isEndOfLine(i) && IS_KINSOKU( script_h.getStringBuffer() + string_buffer_offset + i + 2)){ i += 2; } if (sentence_font.isEndOfLine(i)){ sentence_font.newLine(); for (int i=0 ; i<indent_offset ; i++){ current_page->add(LOC_TWOBYTE_SYMBOL(' ')[0]); current_page->add(LOC_TWOBYTE_SYMBOL(' ')[1]); sentence_font.advanceCharInHankaku(2); } } } out_text[0] = script_h.getStringBuffer()[string_buffer_offset]; out_text[1] = script_h.getStringBuffer()[string_buffer_offset+1]; if ( clickstr_state == CLICK_IGNORE ){ clickstr_state = CLICK_NONE; } else{ if (script_h.checkClickstr(&script_h.getStringBuffer()[string_buffer_offset]) > 0){ if (sentence_font.getRemainingLine() <= clickstr_line) return clickNewPage( out_text ); else return clickWait( out_text ); } else{ clickstr_state = CLICK_NONE; } } if ( skip_flag || draw_one_page_flag || ctrl_pressed_status ){ drawChar( out_text, &sentence_font, false, true, accumulation_surface, &text_info ); num_chars_in_sentence++; string_buffer_offset += 2; return RET_CONTINUE | RET_NOREAD; } else{ drawChar( out_text, &sentence_font, true, true, accumulation_surface, &text_info ); num_chars_in_sentence++; event_mode = WAIT_SLEEP_MODE; if ( sentence_font.wait_time == -1 ) advancePhase( default_text_speed[text_speed_no] ); else advancePhase( sentence_font.wait_time ); return RET_WAIT | RET_NOREAD; } } else if ( ch == '@' ){ // wait for click return clickWait( NULL ); } else if ( ch == '\\' ){ // new page return clickNewPage( NULL ); } else if ( ch == '_' ){ // Ignore following forced return clickstr_state = CLICK_IGNORE; string_buffer_offset++; return RET_CONTINUE | RET_NOREAD; } else if ( ch == '!' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ string_buffer_offset++; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 's' ){ string_buffer_offset++; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ){ sentence_font.wait_time = -1; string_buffer_offset++; } else{ int t = 0; while( script_h.getStringBuffer()[ string_buffer_offset ] >= '0' && script_h.getStringBuffer()[ string_buffer_offset ] <= '9' ){ t = t*10 + script_h.getStringBuffer()[ string_buffer_offset ] - '0'; string_buffer_offset++; } sentence_font.wait_time = t; while (script_h.getStringBuffer()[ string_buffer_offset ] == ' ' || script_h.getStringBuffer()[ string_buffer_offset ] == '\t') string_buffer_offset++; } } else if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'w' || script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ){ bool flag = false; if ( script_h.getStringBuffer()[ string_buffer_offset ] == 'd' ) flag = true; string_buffer_offset++; int tmp_string_buffer_offset = string_buffer_offset; int t = 0; while( script_h.getStringBuffer()[ string_buffer_offset ] >= '0' && script_h.getStringBuffer()[ string_buffer_offset ] <= '9' ){ t = t*10 + script_h.getStringBuffer()[ string_buffer_offset ] - '0'; string_buffer_offset++; } while (script_h.getStringBuffer()[ string_buffer_offset ] == ' ' || script_h.getStringBuffer()[ string_buffer_offset ] == '\t') string_buffer_offset++; if ( skip_flag || draw_one_page_flag || ctrl_pressed_status ){ return RET_CONTINUE | RET_NOREAD; } else{ event_mode = WAIT_SLEEP_MODE; if ( flag ) event_mode |= WAIT_INPUT_MODE; key_pressed_flag = false; startTimer( t ); string_buffer_offset = tmp_string_buffer_offset - 2; return RET_WAIT | RET_NOREAD; } } return RET_CONTINUE | RET_NOREAD; } else if ( ch == '#' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ readColor( &sentence_font.color, script_h.getStringBuffer() + string_buffer_offset ); readColor( &ruby_font.color, script_h.getStringBuffer() + string_buffer_offset ); string_buffer_offset += 7; return RET_CONTINUE | RET_NOREAD; } else if ( ch == '(' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)){ current_page->add('('); startRuby( script_h.getStringBuffer() + string_buffer_offset + 1, sentence_font ); string_buffer_offset++; return RET_CONTINUE | RET_NOREAD; } else if ( ch == '/' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) ){ if ( ruby_struct.stage == RubyStruct::BODY ){ current_page->add('/'); sentence_font.addLineOffset(ruby_struct.margin); string_buffer_offset = ruby_struct.ruby_end - script_h.getStringBuffer(); if (*ruby_struct.ruby_end == ')'){ if ( skip_flag || draw_one_page_flag || ctrl_pressed_status ) endRuby(false, true, accumulation_surface, &text_info); else endRuby(true, true, accumulation_surface, &text_info); current_page->add(')'); string_buffer_offset++; } return RET_CONTINUE | RET_NOREAD; } else{ // skip new line new_line_skip_flag = true; string_buffer_offset++; if (script_h.getStringBuffer()[string_buffer_offset] != 0x0a) errorAndExit( "'new line' must follow '/'." ); return RET_CONTINUE; // skip the following eol } } else if ( ch == ')' && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR) && ruby_struct.stage == RubyStruct::BODY ){ current_page->add(')'); string_buffer_offset++; ruby_struct.stage = RubyStruct::NONE; return RET_CONTINUE | RET_NOREAD; } else{ out_text[0] = ch; if ( clickstr_state == CLICK_IGNORE ){ clickstr_state = CLICK_NONE; } else{ int matched_len = script_h.checkClickstr(script_h.getStringBuffer() + string_buffer_offset); if (matched_len > 0){ if (matched_len == 2) out_text[1] = script_h.getStringBuffer()[ string_buffer_offset + 1 ]; if (sentence_font.getRemainingLine() <= clickstr_line) return clickNewPage( out_text ); else return clickWait( out_text ); } else if (script_h.getStringBuffer()[ string_buffer_offset + 1 ] && script_h.checkClickstr(&script_h.getStringBuffer()[string_buffer_offset+1]) == 1 && script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR){ if ( script_h.getStringBuffer()[ string_buffer_offset + 2 ] && script_h.checkClickstr(&script_h.getStringBuffer()[string_buffer_offset+2]) > 0){ clickstr_state = CLICK_NONE; } else if (script_h.getStringBuffer()[ string_buffer_offset + 1 ] == '@'){ return clickWait( out_text ); } else if (script_h.getStringBuffer()[ string_buffer_offset + 1 ] == '\\'){ return clickNewPage( out_text ); } else{ out_text[1] = script_h.getStringBuffer()[ string_buffer_offset + 1 ]; if (sentence_font.getRemainingLine() <= clickstr_line) return clickNewPage( out_text ); else return clickWait( out_text ); } } else{ clickstr_state = CLICK_NONE; } } bool flush_flag = true; if ( skip_flag || draw_one_page_flag || ctrl_pressed_status ) flush_flag = false; if ( script_h.getStringBuffer()[ string_buffer_offset + 1 ] && script_h.getStringBuffer()[ string_buffer_offset + 1 ] != 0x0a && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)){ out_text[1] = script_h.getStringBuffer()[ string_buffer_offset + 1 ]; drawDoubleChars( out_text, &sentence_font, flush_flag, true, accumulation_surface, &text_info ); num_chars_in_sentence++; } else if (script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR){ drawDoubleChars( out_text, &sentence_font, flush_flag, true, accumulation_surface, &text_info ); num_chars_in_sentence++; } if ( skip_flag || draw_one_page_flag || ctrl_pressed_status ){ if ( script_h.getStringBuffer()[ string_buffer_offset + 1 ] && !(script_h.getEndStatus() & ScriptHandler::END_1BYTE_CHAR)) string_buffer_offset++; string_buffer_offset++; return RET_CONTINUE | RET_NOREAD; } else{ event_mode = WAIT_SLEEP_MODE; if ( sentence_font.wait_time == -1 ) advancePhase( default_text_speed[text_speed_no] ); else advancePhase( sentence_font.wait_time ); return RET_WAIT | RET_NOREAD; } } return RET_NOMATCH; }