You are here

function ARC_sparql_parser::extract_bracket_data in Taxonomy import/export via XML 6.2

Same name and namespace in other branches
  1. 5.2 arc/ARC_sparql_parser.php \ARC_sparql_parser::extract_bracket_data()
  2. 5 arc/ARC_sparql_parser.php \ARC_sparql_parser::extract_bracket_data()
  3. 6 arc/ARC_sparql_parser.php \ARC_sparql_parser::extract_bracket_data()
8 calls to ARC_sparql_parser::extract_bracket_data()
ARC_sparql_parser::parse_ArgList in arc/ARC_sparql_parser.php
ARC_sparql_parser::parse_BrackettedExpression in arc/ARC_sparql_parser.php
ARC_sparql_parser::parse_BuiltInCall in arc/ARC_sparql_parser.php
ARC_sparql_parser::parse_Collection in arc/ARC_sparql_parser.php
ARC_sparql_parser::parse_ConstructTemplate in arc/ARC_sparql_parser.php

... See full list

File

arc/ARC_sparql_parser.php, line 360

Class

ARC_sparql_parser

Code

function extract_bracket_data($val = "") {
  $chars = array(
    "(" => ")",
    "{" => "}",
    "[" => "]",
  );
  if (($start_char = substr($val, 0, 1)) && ($end_char = $chars[$start_char])) {
    $level = 1;
    $val = substr($val, 1);
    $val_length = strlen($val);
    $cur_pos = 0;
    while ($level != 0 && $cur_pos < $val_length) {
      $next_end = strpos($val, $end_char, $cur_pos);
      if ($next_end !== false) {
        $next_start = strpos($val, $start_char, $cur_pos);
        if ($next_start !== false && $next_start < $next_end) {
          $cur_pos = $next_start + 1;
          $level++;
        }
        else {
          $cur_pos = $next_end + 1;
          $level--;
        }
      }
      else {
        $cur_pos = $val_length;
        $this->errors[] = "could not extract data in extract_bracket_data()";
      }
    }
    return substr($val, 0, $cur_pos - 1);
  }
  else {
    $this->errors[] = "could not extract data in extract_bracket_data()";
    return false;
  }
}