Exemplo n.º 1
0
bool ContextPhp::IsStringTriggerCodeComplete(const wxString& str) const
{
    int style = GetCtrl().GetStyleAt(GetCtrl().GetCurrentPos());
    if(IS_BETWEEN(style, wxSTC_HJ_START, wxSTC_HJA_REGEX)) {
        // When in JS section, trigger CC if str is a dot
        return str == ".";
        
    } else if(IS_BETWEEN(style, wxSTC_H_DEFAULT, wxSTC_H_ENTITY)){
        return str == "</" || str == "<";

    } else {
        return (m_completionTriggerStrings.count(str) > 0);
        
    }
}
Exemplo n.º 2
0
int ContextPhp::GetActiveKeywordSet() const
{
    // HTML 0,
    // JS 1,
    // Python 3
    // PHP 4
    int style = GetCtrl().GetStyleAt(GetCtrl().GetCurrentPos());
    if(IS_BETWEEN(style, wxSTC_H_DEFAULT, wxSTC_H_SGML_BLOCK_DEFAULT))
        return 0;
    else if(IS_BETWEEN(style, wxSTC_HJ_START, wxSTC_HJA_REGEX))
        return 1;
    else if(IS_BETWEEN(style, wxSTC_HPHP_DEFAULT, wxSTC_HPHP_OPERATOR) || style == wxSTC_HPHP_COMPLEX_VARIABLE)
        return 4;
    else if(IS_BETWEEN(style, wxSTC_HP_START, wxSTC_HP_IDENTIFIER) ||
        IS_BETWEEN(style, wxSTC_HPA_START, wxSTC_HPA_IDENTIFIER))
        return 3;
    return wxNOT_FOUND;
}
Exemplo n.º 3
0
SL_RESULTS il_group_scores(
    CCTYPE_LIST& conn_comps, CCTYPE_LIST& inv_conn_comps, 
    int horz_cuts, int vert_cuts, 
    float bottom_right_corner_height_percent, float top_right_corner_height_percent,
    HORZTEST_TYPE& horz_test,
    HORZTESTMAX_TYPE& horzmax_test,
    char ocr_letter) {

    int len_conn_comps = (int)conn_comps.size() - 1;
    CCTYPE_LIST& cc = conn_comps;

    float width = (cc[1][X_MAX_COORD]-cc[1][X_MIN_COORD]+1);
    float height = (cc[1][Y_MAX_COORD]-cc[1][Y_MIN_COORD]+1);
	float looks_like_i_must_test = IS_BETWEEN(horz_test[MIN_HEIGHT_PERCENT_COORD], 0.1, 0.25);
    float looks_like_i_tests[] = {
		(float)IS_BETWEEN(horz_test[MIN_HEIGHT_PERCENT_COORD], 0.1, 0.25),
        horz_test[MIN_CONTIG_COORD],
		(float)(horz_test[MIN_SIZE_PERCENT_COORD] < 0.15),
		(float)(horz_test[MIN_WIDTH_PERCENT_COORD] < 0.65),
        (float)IS_BETWEEN(float((horz_test[MIN_HEIGHT_PERCENT_COORD]*height)-width)/width, -0.3, 0.3)
	};
#if DEBUG_SINGLELETTER
    cout << "elongated:" << (float((horz_test[MIN_HEIGHT_PERCENT_COORD]*height)-width)/width) << endl;
#endif    
	float looks_like_i = looks_like_i_must_test * calc_score(MAKE_VECTOR(looks_like_i_tests, float));
#if DEBUG_SINGLELETTER    
    cout << "LOOKS LIKE I = " << looks_like_i << endl;
#endif    
	
	float looks_like_i_weak_must_test = IS_BETWEEN(horz_test[MIN_HEIGHT_PERCENT_COORD], 0.1, 0.35);
    float looks_like_i_weak_tests[] = {
		(float)IS_BETWEEN(horz_test[MIN_HEIGHT_PERCENT_COORD], 0.1, 0.3),
        horz_test[MIN_CONTIG_COORD],
	    (float)(horz_test[MIN_SIZE_PERCENT_COORD] < 0.15),
		(float)(horz_test[MIN_WIDTH_PERCENT_COORD] < 0.9)
	};
	float looks_like_i_weak = looks_like_i_weak_must_test * calc_score(MAKE_VECTOR(looks_like_i_weak_tests, float), NULL, true);

	float looks_like_excl_must_test = IS_BETWEEN(horz_test[MIN_HEIGHT_PERCENT_COORD], 0.9, 0.7);
    float looks_like_excl_tests[] = {
		horz_test[MIN_CONTIG_COORD],
		(float)(horz_test[MIN_SIZE_PERCENT_COORD] < 0.1)
	};
	float looks_like_excl = looks_like_excl_must_test * calc_score(MAKE_VECTOR(looks_like_excl_tests, float));

    float looks_like_t;
    if (horzmax_test.size() == 0) {
        looks_like_t = 0;
    } else {
        float looks_like_t1_must_test = (horzmax_test.size() == 1) && (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.12, 0.45));
        if ((ocr_letter != 't') && (ocr_letter != 'f')) {
            looks_like_t1_must_test *= ((horzmax_test.size() == 1) && (horzmax_test[0][HORZMAX_WIDTH_COORD] > 1.7));
        }
        float looks_like_t1_tests[] = {
            (float)(horzmax_test.size() == 1),
            (float)(IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.12, 0.45)),
            (float)(horzmax_test[0][HORZMAX_SIZE_COORD] < 0.25)
	    };
        float looks_like_t1 = looks_like_t1_must_test * calc_score(MAKE_VECTOR(looks_like_t1_tests, float));
        float looks_like_t2_must_test = (horzmax_test.size() == 2) && (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.12, 0.45)) && (IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.65, 1));
        if ((ocr_letter != 't') && (ocr_letter != 'f')) {
            looks_like_t2_must_test *= ((horzmax_test.size() == 2) && (horzmax_test[0][HORZMAX_WIDTH_COORD] > 1.7));
        }
        float looks_like_t2_tests[] = {
            (float)(horzmax_test.size() == 2),
            (float)(IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.12, 0.45)),
            (float)(horzmax_test[0][HORZMAX_SIZE_COORD] < 0.25),
            (float)((horzmax_test.size() == 2) && (horzmax_test[1][HORZMAX_SIZE_COORD] < 0.2)),
            (float)((horzmax_test.size() == 2) && IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.75, 1))
        };
        float looks_like_t2 = looks_like_t2_must_test * calc_score(MAKE_VECTOR(looks_like_t2_tests, float), NULL, true);
 
        looks_like_t = MAX(looks_like_t1, looks_like_t2);
#if DEBUG_LOG
        cout << "LOOKS LIKE T = " << looks_like_t << endl;
#endif        
	}

    float looks_like_f;
    if (horzmax_test.size() == 0) {
        looks_like_f = 0;
    } else {
        float looks_like_f1_must_test = (horzmax_test.size() == 1) && (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.2, 0.55));
        float looks_like_f1_tests[] = {
            (float)(horzmax_test.size() == 1),
            (float)(IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.2, 0.45)),
            (float)(horzmax_test[0][HORZMAX_SIZE_COORD] < 0.25)
        };
        float looks_like_f1 = looks_like_f1_must_test * calc_score(MAKE_VECTOR(looks_like_f1_tests, float));
        float looks_like_f2_must_test = (horzmax_test.size() == 2) && ( ((IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.2, 0.55)) && (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0, 0.25))) || ((IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.2, 0.55)) && (IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.9, 1))) ) ;
        //cout << "f2must:" <<(horzmax_test.size() == 2)<<";"<< (IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.2, 0.55)) <<";"<<(IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0, 0.25)) << "----" << horzmax_test[1][HORZMAX_HEIGHT_COORD] << " " <<  horzmax_test[0][HORZMAX_HEIGHT_COORD] << endl;
        float looks_like_f2_tests[] = {
            (float)(horzmax_test.size() == 2),
            (float)((horzmax_test.size() == 2) && ((IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.2, 0.49)) || (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0.2, 0.49)))),
            (float)((horzmax_test.size() == 2) && (horzmax_test[0][HORZMAX_SIZE_COORD] < 0.25) && (horzmax_test[1][HORZMAX_SIZE_COORD] < 0.25)),
            (float)(horzmax_test[0][HORZMAX_SIZE_COORD] < 0.2),
            (float)(IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0, 0.2))
        };
        float looks_like_f2 = looks_like_f2_must_test * calc_score(MAKE_VECTOR(looks_like_f2_tests, float), NULL, true);
        float looks_like_f3_must_test = (horzmax_test.size() == 3) && (IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.2, 0.55)) && (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0, 0.25)) && (IS_BETWEEN(horzmax_test[2][HORZMAX_HEIGHT_COORD], 0.9, 1));
        //cout << "f3MUST " << horzmax_test.size() <<";"<<(horzmax_test.size() == 3) << ";" << (IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.2, 0.55)) << ";" << (IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0, 0.25)) << ";" << (IS_BETWEEN(horzmax_test[2][HORZMAX_HEIGHT_COORD], 0.9, 1)) << endl;
        float looks_like_f3_tests[] = {
            (float)(horzmax_test.size() == 3),
            (float)((horzmax_test.size() == 3) && (IS_BETWEEN(horzmax_test[1][HORZMAX_HEIGHT_COORD], 0.2, 0.49))),
            (float)((horzmax_test.size() == 3) && (horzmax_test[1][HORZMAX_SIZE_COORD] < 0.25)),
            (float)((horzmax_test.size() == 3) && (horzmax_test[2][HORZMAX_SIZE_COORD] < 0.25)),
            (float)(horzmax_test[0][HORZMAX_SIZE_COORD] < 0.2),
            (float)(IS_BETWEEN(horzmax_test[0][HORZMAX_HEIGHT_COORD], 0, 0.2)),
            (float)((horzmax_test.size() == 3) && (IS_BETWEEN(horzmax_test[2][HORZMAX_HEIGHT_COORD], 0.9, 1)))
        };
        float looks_like_f3 = looks_like_f3_must_test * calc_score(MAKE_VECTOR(looks_like_f3_tests, float));

        looks_like_f = MAX(MAX(looks_like_f1, looks_like_f2), looks_like_f3);
#if DEBUG_LOG        
        cout << "LOOKS LIKE F = " << looks_like_f << endl;
#endif        
    }
    //// LOWER-CASE L ////
    float score_l_tests[] = {
        (float)(len_conn_comps == 1), (float)(horz_cuts == 1), (float)(vert_cuts == 1),
        // Doesn't look like i or ! or t or f
        1 - ((ocr_letter == 'i')? looks_like_i_weak : looks_like_i), 1 - looks_like_excl, 1 - looks_like_t, 1 - looks_like_f
	};
    float score_l_weights_array[]   = {1,1,1,1,1,1,1}; //0.25,0.25,0.25,0.25};
    std::vector<float> score_l_weights = MAKE_VECTOR(score_l_weights_array, float);
    //score_l_weights = [...]
    float score_l = calc_score(MAKE_VECTOR(score_l_tests, float), &score_l_weights);

    //// LOWER-CASE I ////
	float score_i_non_contig_must_test = cc_y_percent(cc, cc[0], 1) > cc_y_percent(cc, cc[0], 2);
    float score_i_non_contig_tests[] = {
        (float)(len_conn_comps == 2),
        (float)(cc_size_percent(cc, cc[0], 1) > 0.6), //body
        (float)(cc_size_percent(cc, cc[0], 2) > 0.1), //dot
//        cc_size_percent(cc, cc[0], 2) > 0.02, //dot
//        ABS(cc_x_percent(cc, cc[0], 1) - cc_x_percent(cc, cc[0], 2)) < 0.1,
        (float)((cc_x_percent(cc, cc[0], 1) - cc_x_percent(cc, cc[0], 2)) > - 0.1),
//        horz_cuts == 1, vert_cuts == 2
        (float)(horz_cuts == 1), (float)(IS_BETWEEN(vert_cuts,1,2))
    };
    float score_i_contig_tests[] = {
        (float)(len_conn_comps == 1), (float)(horz_cuts == 1), (float)(IS_BETWEEN(vert_cuts, 1, 2)),
        (ocr_letter == 'i')? looks_like_i_weak : looks_like_i,
        //looks_like_i,
		1 - looks_like_t,
        1 - looks_like_f
    };
    float score_i_contig_weights_array[]   = {1,1,1,4,1,1};
    std::vector<float> score_i_contig_weights = MAKE_VECTOR(score_i_contig_weights_array, float);

    float score_i;
    float score_i_contig = calc_score(MAKE_VECTOR(score_i_contig_tests, float), &score_i_contig_weights);
    float score_i_noncontig = score_i_non_contig_must_test * calc_score(MAKE_VECTOR(score_i_non_contig_tests, float));

    score_i = MAX(score_i_contig, score_i_noncontig);

    //// EXCLAMATION MARK ////
    float score_excl_non_contig_tests[] = {
        (float)(len_conn_comps == 2),
        (float)(IS_BETWEEN(cc_size_percent(cc, cc[0], 1), 0.6, 0.9)), //body
        (float)(cc_y_percent(cc, cc[0], 1) < cc_y_percent(cc, cc[0], 2)),
        (float)(ABS(cc_x_percent(cc, cc[0], 1) - cc_x_percent(cc, cc[0], 2)) < 0.1),
        (float)(horz_cuts == 1),
        (float)(vert_cuts == 2)
    };
	/*cout << cc_size_percent(cc, cc[0], 1) << "," << cc_y_percent(cc, cc[0], 1) << "," << cc_y_percent(cc, cc[0], 2)
	<< "," << cc_x_percent(cc, cc[0], 1) << "," << cc_x_percent(cc, cc[0], 2) << endl;
	print_vector(MAKE_VECTOR(score_excl_non_contig_tests, float));*/
	
    float score_excl_contig_tests[] = {
        (float)(len_conn_comps == 1),
        (float)(horz_cuts == 1),
        (float)(vert_cuts == 1),
        looks_like_excl
    };
    float score_excl_contig_weights_array[]   = {1,1,1,4};
    std::vector<float> score_excl_contig_weights = MAKE_VECTOR(score_excl_contig_weights_array, float);
    float score_excl = MAX(
        calc_score(MAKE_VECTOR(score_excl_non_contig_tests, float)),
        calc_score(MAKE_VECTOR(score_excl_contig_tests, float), &score_excl_contig_weights));

    //// LOWER-CASE T ////
    float score_t_tests[] = {
        (float)(len_conn_comps == 1),
        (float)(horz_cuts == 1),
        (float)(IS_BETWEEN(vert_cuts, 1, 2)),
        looks_like_t, 
        (float)(is_cornerish(bottom_right_corner_height_percent, 0.1)),
        (float)(!is_cornerish(top_right_corner_height_percent, 0.1)),
        1 - looks_like_i
    };
    float score_t_weights_array[]   = {1,1,1,4,1,1,1};
    std::vector<float> score_t_weights = MAKE_VECTOR(score_t_weights_array, float);
    float score_t = calc_score(MAKE_VECTOR(score_t_tests, float), &score_t_weights);

    //// LOWER-CASE F ////
    float score_f_tests[] = {
        (float)(len_conn_comps == 1),
        (float)(horz_cuts == 1),
        (float)(IS_BETWEEN(vert_cuts, 1, 2)),
        looks_like_f, 
        (float)(!is_cornerish(bottom_right_corner_height_percent, 0.1)),
        (float)(is_cornerish(top_right_corner_height_percent, 0.1)),
        1 - looks_like_i
    };
    float score_f_weights_array[]   = {1,1,1,4,1,1,1};
    std::vector<float> score_f_weights = MAKE_VECTOR(score_f_weights_array, float);
    float score_f = calc_score(MAKE_VECTOR(score_f_tests, float), &score_f_weights);

    SL_RESULTS sl_results;

    sl_results.output_params[OUTPUT_PARAM_BODY_HEIGHT] = cc[1][Y_MAX_COORD] - cc[1][Y_MIN_COORD] + 1;
    if (score_i_contig > score_i_noncontig) {
        sl_results.output_params[OUTPUT_PARAM_I_BODY_HEIGHT] = sl_results.output_params[OUTPUT_PARAM_BODY_HEIGHT]*(1-horz_test[MIN_HEIGHT_PERCENT_COORD]);
    } else {
        sl_results.output_params[OUTPUT_PARAM_I_BODY_HEIGHT] = sl_results.output_params[OUTPUT_PARAM_BODY_HEIGHT];
    }
    
    sl_results.group_scores['l'] = score_l;
    sl_results.group_scores['i'] = score_i;
    sl_results.group_scores['!'] = score_excl;
    sl_results.group_scores['t'] = score_t;
    sl_results.group_scores['f'] = score_f;
    // TODO
    sl_results.group_scores['I'] = sl_results.group_scores['|'] = score_l;

    return sl_results;
}
Exemplo n.º 4
0
//---------------------------------------------------------------------
///
/// main Programm
/// @return should never return
int main(void)
{
  uint16_t i, counter, length;

  uint8_t ntag_i2c_address;

  int err = -1;

  int i2c_fd = -1;

  uint8_t ntag_eeprom_block_address;

  const uint8_t RECcarString[21] = {'H','e','l','l','o','!',' ','I',' ','a','m',' ','R','E','C',' ','c','a','r','.','\0'};

  uint8_t readBuff[16];
  uint8_t writeBuff[16];

  char commandLineString[30];
  char string[30];

//  main buffer used to read and write user memory
//  Buffer_Init(readBuff, sizeof(readBuff), 0);
//
//  err = eraseEEPROM();
//
//  memcpy(writeBuff, RECcarString, sizeof(RECcarString));
//  err = ntagWriteData(NTAG_MEM_BLOCK_START_ADDR_USER_MEMORY, writeBuff, sizeof(RECcarString));
//
//  err = ntagReadData(NTAG_MEM_BLOCK_START_ADDR_USER_MEMORY, readBuff, sizeof(readBuff));

  printf("written string: %s\n", RECcarString);

  ntag_i2c_address = 0x22;

  err = ntagI2CMemIfInit(100,
		  	  	   ntag_i2c_address,
		  	  	   /*int16_t (*cbMasterInit)(uint32_t)*/0,
		  	  	   /*int16_t (*cbSend)(uint8_t*, uint8_t)*/NTAG_i2c_write,
		  	  	   /*int16_t (*cbReceive)(uint8_t*, uint8_t)*/NTAG_i2c_read,
		  	  	   /*int16_t (*cbSendReceive)(uint8_t*, uint8_t, uint8_t*, uint8_t)*/0,
		  	  	   /*int16_t (*cbClose)(void) )*/NTAG_i2c_close
  	  	  	  	   );

  if(err == NTAG_ERR_OK)
	  printf("NTAG interface set OK.\n");
  else
	  printf("NTAG interface set FAILED.\n");


  err = NTAG_i2c_init(ntag_i2c_address, &i2c_fd);

  switch( err ) {
  	  case IMUPI_NO_ERROR:
  		  fprintf (stdout, "Device found.\n" );
  		  break;
  	  case IMUPI_I2C_OPEN_ERROR:
  		  fprintf (stderr, "Unable to open I2C device.\n" );
          exit( EXIT_FAILURE );
  	  case IMUPI_I2C_DEV_NOT_FOUND:
          fprintf (stderr, "Device not found.\n" );
          exit( EXIT_FAILURE );
  	  case IMUPI_I2C_WRITE_ERROR:
          fprintf (stderr, "I2C write error.\n" );
          exit( EXIT_FAILURE );
      default:
          fprintf (stderr, "Initialization errror.\n" );
          exit( EXIT_FAILURE );
  }


  printf("select an NTAG EEPROM memory block to be read: ");

//  scanf("%s", commandLineString);

  do{

	  scanf("%s", commandLineString);

	  if(strlen(commandLineString) > 2)
	  {
		  printf("invalid request!\nretype address or 'q' to quit");
	  	  continue;
	  }
	  else if(strlen(commandLineString) == 1)
	  {
		  if(IS_BETWEEN(commandLineString[0], '0', '9') ||
				  IS_BETWEEN(commandLineString[0], 'A', 'F') ||
				  IS_BETWEEN(commandLineString[0], 'a', 'f') == 1 ||
				  commandLineString[0] == 'Q' || commandLineString[0] == 'q')
			  break;
	  }
	  else if(strlen(commandLineString) == 2)
	  {
		  if((IS_BETWEEN(commandLineString[0], '0', '9') ||
				  IS_BETWEEN(commandLineString[0], 'A', 'F') ||
				  IS_BETWEEN(commandLineString[0], 'a', 'f') == 1)
				  &&
			  (IS_BETWEEN(commandLineString[1], '0', '9') ||
			  	  IS_BETWEEN(commandLineString[1], 'A', 'F') ||
			  	  IS_BETWEEN(commandLineString[1], 'a', 'f') == 1)
			  	  )
			  break;
	  }
  }while(1);


  if(commandLineString[0] == 'q' || commandLineString[0] == 'Q')
  	  return 0;

  for(i = 0; i < strlen(commandLineString); i++)
  {
	  if(IS_BETWEEN(commandLineString[i], '0', '9'))
	  	  ntag_eeprom_block_address = commandLineString[i] - '0';
	  else if(IS_BETWEEN(commandLineString[i], 'A', 'F'))
	  	  ntag_eeprom_block_address = commandLineString[i] - 'A' + 0x0A;
	  else if(IS_BETWEEN(commandLineString[i], 'a', 'f'))
		  ntag_eeprom_block_address = commandLineString[i] - 'a' + 0x0A;
  }

  printf("reading block %d:\n", ntag_eeprom_block_address);


   err = ntagI2CReadBlock(ntag_eeprom_block_address, readBuff);

   switch(err) {
   		case IMUPI_NO_ERROR:
   			break;

   		case IMUPI_INIT_ERROR:
   			fprintf (stderr, "Trying to read an uninitialized device.\n" );
   			exit( EXIT_FAILURE );

   		case IMUPI_I2C_DEV_NOT_FOUND:
   			fprintf (stderr, "Device not found.\n" );
   			exit( EXIT_FAILURE );

   		case IMUPI_I2C_READ_ERROR:
   			fprintf (stderr, "I2C read error.\n" );
   			exit( EXIT_FAILURE );

   		default:
   			fprintf (stderr, "Read errror.\n" );
   			exit( EXIT_FAILURE );
   	}

   fprintf(stdout, "Device read!\n" );

	for(i = 0, counter = 0; i < 16; i++)
	{
		printf("0x%02X", readBuff[i]);
		if(counter++ % 4 == 3)
			printf("\n");
		else
			printf(" - ");
	}

	ntagI2CMemIFClose();

  return err;
}