def get_strings(self, need_quote=False):
        """ret: string"""
        self.skip()

        if self.buf[0] == ';' or self.buf[0] == '{' or self.buf[0] == '}':
            error.err_add(self.errors, self.pos,
                          'EXPECTED_ARGUMENT', self.buf[0])
            raise error.Abort
        if self.buf[0] == '"' or self.buf[0] == "'":
            # for double-quoted string,  loop over string and translate
            # escaped characters.  also strip leading whitespace as
            # necessary.
            # for single-quoted string, keep going until end quote is found.
            quote_char = self.buf[0]
            # collect output in strs (list of strings)
            strs = []
            res = []
            # remember position of " character
            indentpos = self.offset
            i = 1
            while True:
                buflen = len(self.buf)
                start = i
                while i < buflen:
                    if self.buf[i] == quote_char:
                        # end-of-string; copy the buf to output
                        res.append(self.buf[start:i])
                        strs.append((u''.join(res), quote_char))
                        # and trim buf
                        self.set_buf(i+1)
                        # check for '+' operator
                        self.skip()
                        if self.buf[0] == '+':
                            self.set_buf(1)
                            self.skip()
                            nstrs = self.get_strings(need_quote=True)
                            strs.extend(nstrs)
                        return strs
                    elif (quote_char == '"' and
                          self.buf[i] == '\\' and i < (buflen-1)):
                        # check for special characters
                        special = None
                        if self.buf[i+1] == 'n':
                            special = '\n'
                        elif self.buf[i+1] == 't':
                            special = '\t'
                        elif self.buf[i+1] == '\"':
                            special = '\"'
                        elif self.buf[i+1] == '\\':
                            special = '\\'
                        elif self.strict_quoting and self.is_1_1:
                            error.err_add(self.errors, self.pos,
                                          'ILLEGAL_ESCAPE', self.buf[i+1])
                            raise error.Abort
                        elif self.strict_quoting:
                            error.err_add(self.errors, self.pos,
                                          'ILLEGAL_ESCAPE_WARN', self.buf[i+1])
                        if special != None:
                            res.append(self.buf[start:i])
                            res.append(special)
                            i = i + 1
                            start = i + 1
                    i = i + 1
                # end-of-line
                # first strip trailing whitespace in double quoted strings
                # pre: self.buf[i-1] == '\n'
                if i > 2 and self.buf[i-2] == '\r':
                    j = i - 3
                else:
                    j = i - 2
                k = j
                while j >= 0 and self.buf[j].isspace():
                    j = j - 1
                if j != k: # we found trailing whitespace
                    s = self.buf[start:j+1] + self.buf[k+1:i]
                else:
                    s = self.buf[start:i]
                res.append(s)
                self.readline()
                i = 0
                if quote_char == '"':
                    # skip whitespace used for indentation
                    buflen = len(self.buf)
                    while (i < buflen and self.buf[i].isspace() and
                           i <= indentpos):
                        i = i + 1
                    if i == buflen:
                        # whitespace only on this line; keep it as is
                        i = 0
        elif need_quote == True:
            error.err_add(self.errors, self.pos, 'EXPECTED_QUOTED_STRING', ())
            raise error.Abort
        else:
            # unquoted string
            buflen = len(self.buf)
            i = 0
            while i < buflen:
                if (self.buf[i].isspace() or self.buf[i] == ';' or
                    self.buf[i] == '{' or self.buf[i] == '}' or
                    self.buf[i:i+2] == '//' or self.buf[i:i+2] == '/*' or
                    self.buf[i:i+2] == '*/'):
                    res = self.buf[:i]
                    self.set_buf(i)
                    return [(res, '')]
                i = i + 1