1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #pragma once 21 22 #include <basic/sbxdef.hxx> 23 #include <vcl/errcode.hxx> 24 25 // The scanner is stand-alone, i. e. it can be used from everywhere. 26 // A BASIC-instance is necessary for error messages. Without BASIC 27 // the errors are only counted. Also the BASIC is necessary when an 28 // advanced SBX-variable shall be used for data type recognition etc. 29 30 class StarBASIC; 31 32 class SbiScanner 33 { 34 OUString aBuf; // input buffer 35 OUString aLine; 36 sal_Int32 nLineIdx; 37 sal_Int32 nSaveLineIdx; 38 StarBASIC* pBasic; // instance for error callbacks 39 40 void scanAlphanumeric(); 41 void scanGoto(); 42 bool readLine(); 43 protected: 44 OUString aSym; 45 OUString aError; 46 SbxDataType eScanType; 47 double nVal; // numeric value 48 sal_Int32 nSavedCol1; 49 sal_Int32 nCol; 50 sal_Int32 nErrors; 51 sal_Int32 nColLock; // lock counter for Col1 52 sal_Int32 nBufPos; 53 sal_Int32 nLine; 54 sal_Int32 nCol1, nCol2; 55 bool bSymbol; // true: symbol scanned 56 bool bNumber; // true: number scanned 57 bool bSpaces; // true: whitespace before token 58 bool bAbort; 59 bool bHash; // true: # has been read in 60 bool bError; // true: generate error 61 bool bCompatible; // true: OPTION compatible 62 bool bVBASupportOn; // true: OPTION VBASupport 1 otherwise default False 63 bool bPrevLineExtentsComment; // true: Previous line is comment and ends on "... _" 64 bool bClosingUnderscore; // true: Closing underscore followed by end of line 65 66 bool bInStatement; 67 void GenError( ErrCode ); 68 public: 69 SbiScanner( const OUString&, StarBASIC* = nullptr ); 70 71 void EnableErrors() { bError = false; } 72 bool IsHash() const { return bHash; } 73 bool IsCompatible() const { return bCompatible; } 74 void SetCompatible( bool b ) { bCompatible = b; } // #118206 75 bool IsVBASupportOn() const { return bVBASupportOn; } 76 bool WhiteSpace() const { return bSpaces; } 77 sal_Int32 GetErrors() const { return nErrors; } 78 sal_Int32 GetLine() const { return nLine; } 79 sal_Int32 GetCol1() const { return nCol1; } 80 void SetCol1( sal_Int32 n ) { nCol1 = n; } 81 StarBASIC* GetBasic() { return pBasic; } 82 void SaveLine() { nSaveLineIdx = nLineIdx; } 83 void RestoreLine() { nLineIdx = nSaveLineIdx; } 84 void LockColumn(); 85 void UnlockColumn(); 86 bool DoesColonFollow(); 87 88 bool NextSym(); 89 const OUString& GetSym() const { return aSym; } 90 SbxDataType GetType() const { return eScanType; } 91 double GetDbl() const { return nVal; } 92 }; 93 94 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 95
