1*5900e8ecSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5900e8ecSAndrew Rist * distributed with this work for additional information
6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance
9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at
10*5900e8ecSAndrew Rist *
11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*5900e8ecSAndrew Rist *
13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an
15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the
17*5900e8ecSAndrew Rist * specific language governing permissions and limitations
18*5900e8ecSAndrew Rist * under the License.
19*5900e8ecSAndrew Rist *
20*5900e8ecSAndrew Rist *************************************************************/
21*5900e8ecSAndrew Rist
22*5900e8ecSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svtools.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <ctype.h>
28cdf0e10cSrcweir #include <stdio.h>
29cdf0e10cSrcweir #include <tools/urlobj.hxx>
30cdf0e10cSrcweir #ifndef _SVSTDARR_HXX
31cdf0e10cSrcweir #define _SVSTDARR_ULONGS
32cdf0e10cSrcweir #include <svl/svstdarr.hxx>
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir
35cdf0e10cSrcweir #include <svtools/parhtml.hxx>
36cdf0e10cSrcweir #include <svtools/htmltokn.h>
37cdf0e10cSrcweir #include <svtools/htmlkywd.hxx>
38cdf0e10cSrcweir
39cdf0e10cSrcweir /* */
40cdf0e10cSrcweir
41cdf0e10cSrcweir // Tabellen zum Umwandeln von Options-Werten in Strings
42cdf0e10cSrcweir
43cdf0e10cSrcweir static HTMLOptionEnum __READONLY_DATA aScriptLangOptEnums[] =
44cdf0e10cSrcweir {
45cdf0e10cSrcweir { OOO_STRING_SVTOOLS_HTML_LG_starbasic, HTML_SL_STARBASIC },
46cdf0e10cSrcweir { OOO_STRING_SVTOOLS_HTML_LG_javascript, HTML_SL_JAVASCRIPT },
47cdf0e10cSrcweir { OOO_STRING_SVTOOLS_HTML_LG_javascript11,HTML_SL_JAVASCRIPT },
48cdf0e10cSrcweir { OOO_STRING_SVTOOLS_HTML_LG_livescript, HTML_SL_JAVASCRIPT },
49cdf0e10cSrcweir // { OOO_STRING_SVTOOLS_HTML_LG_unused_javascript, HTML_SL_UNUSEDJS },
50cdf0e10cSrcweir // { OOO_STRING_SVTOOLS_HTML_LG_vbscript, HTML_SL_VBSCRIPT },
51cdf0e10cSrcweir // { OOO_STRING_SVTOOLS_HTML_LG_starone, HTML_SL_STARONE },
52cdf0e10cSrcweir { 0, 0 }
53cdf0e10cSrcweir };
54cdf0e10cSrcweir
ParseScriptOptions(String & rLangString,const String & rBaseURL,HTMLScriptLanguage & rLang,String & rSrc,String & rLibrary,String & rModule)55cdf0e10cSrcweir sal_Bool HTMLParser::ParseScriptOptions( String& rLangString, const String& rBaseURL,
56cdf0e10cSrcweir HTMLScriptLanguage& rLang,
57cdf0e10cSrcweir String& rSrc,
58cdf0e10cSrcweir String& rLibrary,
59cdf0e10cSrcweir String& rModule )
60cdf0e10cSrcweir {
61cdf0e10cSrcweir const HTMLOptions *pScriptOptions = GetOptions();
62cdf0e10cSrcweir
63cdf0e10cSrcweir rLangString.Erase();
64cdf0e10cSrcweir rLang = HTML_SL_JAVASCRIPT;
65cdf0e10cSrcweir rSrc.Erase();
66cdf0e10cSrcweir rLibrary.Erase();
67cdf0e10cSrcweir rModule.Erase();
68cdf0e10cSrcweir
69cdf0e10cSrcweir for( sal_uInt16 i = pScriptOptions->Count(); i; )
70cdf0e10cSrcweir {
71cdf0e10cSrcweir const HTMLOption *pOption = (*pScriptOptions)[ --i ];
72cdf0e10cSrcweir switch( pOption->GetToken() )
73cdf0e10cSrcweir {
74cdf0e10cSrcweir case HTML_O_LANGUAGE:
75cdf0e10cSrcweir {
76cdf0e10cSrcweir rLangString = pOption->GetString();
77cdf0e10cSrcweir sal_uInt16 nLang;
78cdf0e10cSrcweir if( pOption->GetEnum( nLang, aScriptLangOptEnums ) )
79cdf0e10cSrcweir rLang = (HTMLScriptLanguage)nLang;
80cdf0e10cSrcweir else
81cdf0e10cSrcweir rLang = HTML_SL_UNKNOWN;
82cdf0e10cSrcweir }
83cdf0e10cSrcweir break;
84cdf0e10cSrcweir
85cdf0e10cSrcweir case HTML_O_SRC:
86cdf0e10cSrcweir rSrc = INetURLObject::GetAbsURL( rBaseURL, pOption->GetString() );
87cdf0e10cSrcweir break;
88cdf0e10cSrcweir case HTML_O_SDLIBRARY:
89cdf0e10cSrcweir rLibrary = pOption->GetString();
90cdf0e10cSrcweir break;
91cdf0e10cSrcweir
92cdf0e10cSrcweir case HTML_O_SDMODULE:
93cdf0e10cSrcweir rModule = pOption->GetString();
94cdf0e10cSrcweir break;
95cdf0e10cSrcweir }
96cdf0e10cSrcweir }
97cdf0e10cSrcweir
98cdf0e10cSrcweir return sal_True;
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
RemoveSGMLComment(String & rString,sal_Bool bFull)101cdf0e10cSrcweir void HTMLParser::RemoveSGMLComment( String &rString, sal_Bool bFull )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir sal_Unicode c = 0;
104cdf0e10cSrcweir while( rString.Len() &&
105cdf0e10cSrcweir ( ' '==(c=rString.GetChar(0)) || '\t'==c || '\r'==c || '\n'==c ) )
106cdf0e10cSrcweir rString.Erase( 0, 1 );
107cdf0e10cSrcweir
108cdf0e10cSrcweir while( rString.Len() &&
109cdf0e10cSrcweir ( ' '==(c=rString.GetChar( rString.Len()-1))
110cdf0e10cSrcweir || '\t'==c || '\r'==c || '\n'==c ) )
111cdf0e10cSrcweir rString.Erase( rString.Len()-1 );
112cdf0e10cSrcweir
113cdf0e10cSrcweir
114cdf0e10cSrcweir // SGML-Kommentare entfernen
115cdf0e10cSrcweir if( rString.Len() >= 4 &&
116cdf0e10cSrcweir rString.CompareToAscii( "<!--", 4 ) == COMPARE_EQUAL )
117cdf0e10cSrcweir {
118cdf0e10cSrcweir xub_StrLen nPos = 3;
119cdf0e10cSrcweir if( bFull )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir // die gesamte Zeile !
122cdf0e10cSrcweir nPos = 4;
123cdf0e10cSrcweir while( nPos < rString.Len() &&
124cdf0e10cSrcweir ( ( c = rString.GetChar( nPos )) != '\r' && c != '\n' ) )
125cdf0e10cSrcweir ++nPos;
126cdf0e10cSrcweir if( c == '\r' && nPos+1 < rString.Len() &&
127cdf0e10cSrcweir '\n' == rString.GetChar( nPos+1 ))
128cdf0e10cSrcweir ++nPos;
129cdf0e10cSrcweir else if( c != '\n' )
130cdf0e10cSrcweir nPos = 3;
131cdf0e10cSrcweir }
132cdf0e10cSrcweir rString.Erase( 0, ++nPos );
133cdf0e10cSrcweir }
134cdf0e10cSrcweir
135cdf0e10cSrcweir if( rString.Len() >=3 &&
136cdf0e10cSrcweir rString.Copy(rString.Len()-3).CompareToAscii("-->")
137cdf0e10cSrcweir == COMPARE_EQUAL )
138cdf0e10cSrcweir {
139cdf0e10cSrcweir rString.Erase( rString.Len()-3 );
140cdf0e10cSrcweir if( bFull )
141cdf0e10cSrcweir {
142cdf0e10cSrcweir // auch noch ein "//" oder "'" und ggf CR/LF davor
143cdf0e10cSrcweir rString.EraseTrailingChars();
144cdf0e10cSrcweir xub_StrLen nDel = 0, nLen = rString.Len();
145cdf0e10cSrcweir if( nLen >= 2 &&
146cdf0e10cSrcweir rString.Copy(nLen-2).CompareToAscii("//") == COMPARE_EQUAL )
147cdf0e10cSrcweir {
148cdf0e10cSrcweir nDel = 2;
149cdf0e10cSrcweir }
150cdf0e10cSrcweir else if( nLen && '\'' == rString.GetChar(nLen-1) )
151cdf0e10cSrcweir {
152cdf0e10cSrcweir nDel = 1;
153cdf0e10cSrcweir }
154cdf0e10cSrcweir if( nDel && nLen >= nDel+1 )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir c = rString.GetChar( nLen-(nDel+1) );
157cdf0e10cSrcweir if( '\r'==c || '\n'==c )
158cdf0e10cSrcweir {
159cdf0e10cSrcweir nDel++;
160cdf0e10cSrcweir if( '\n'==c && nLen >= nDel+1 &&
161cdf0e10cSrcweir '\r'==rString.GetChar( nLen-(nDel+1) ) )
162cdf0e10cSrcweir nDel++;
163cdf0e10cSrcweir }
164cdf0e10cSrcweir }
165cdf0e10cSrcweir rString.Erase( nLen-nDel );
166cdf0e10cSrcweir }
167cdf0e10cSrcweir }
168cdf0e10cSrcweir }
169cdf0e10cSrcweir
170