1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 #include <tools/urlobj.hxx> //INetURLObject 28 #include <sfx2/docfile.hxx> //SfxMedium 29 #include <filter/msfilter/msfiltertracer.hxx> //MSFilterTracer 30 #include "tracer.hxx" //sw::log::Tracer 31 32 using rtl::OUString; 33 #define CAU(X) RTL_CONSTASCII_USTRINGPARAM(X) 34 #define C2O(X) OUString(CAU(X)) 35 #define COMMENT(X) OUString() 36 37 namespace sw 38 { 39 namespace log 40 { Tracer(const SfxMedium & rMed)41 Tracer::Tracer(const SfxMedium &rMed) 42 : mpTrace(0) 43 { 44 using namespace ::com::sun::star::uno; 45 using namespace ::com::sun::star::beans; 46 Sequence<PropertyValue> aConfig(1); 47 PropertyValue aPropValue; 48 aPropValue.Value <<= 49 OUString(rMed.GetURLObject().GetMainURL( 50 INetURLObject::NO_DECODE)); 51 aPropValue.Name = C2O("DocumentURL"); 52 aConfig[0] = aPropValue; 53 OUString aTraceConfigPath(CAU("Office.Tracing/Import/Word")); 54 mpTrace = new MSFilterTracer(aTraceConfigPath, &aConfig); 55 if (mpTrace) 56 mpTrace->StartTracing(); 57 } 58 ~Tracer()59 Tracer::~Tracer() 60 { 61 if (mpTrace) 62 { 63 mpTrace->EndTracing(); 64 delete mpTrace; 65 } 66 } 67 Log(Problem eProblem)68 void Tracer::Log(Problem eProblem) 69 { 70 if (!mpTrace) 71 return; 72 73 OUString sID(CAU("sw")); 74 sID += rtl::OUString::valueOf(static_cast<sal_Int32>(eProblem)); 75 switch (eProblem) 76 { 77 case ePrinterMetrics: 78 mpTrace->Trace(sID, COMMENT("PrinterMetrics")); 79 break; 80 case eExtraLeading: 81 mpTrace->Trace(sID, COMMENT("Extra Leading")); 82 break; 83 case eTabStopDistance: 84 mpTrace->Trace(sID, COMMENT("Minimum Tab Distance")); 85 break; 86 case eDontUseHTMLAutoSpacing: 87 mpTrace->Trace(sID, COMMENT("HTML AutoSpacing")); 88 break; 89 case eAutoWidthFrame: 90 mpTrace->Trace(sID, COMMENT("AutoWidth")); 91 break; 92 case eRowCanSplit: 93 mpTrace->Trace(sID, COMMENT("Splitable Row")); 94 break; 95 case eSpacingBetweenCells: 96 mpTrace->Trace(sID, COMMENT("Spacing Between Cells")); 97 break; 98 case eTabInNumbering: 99 mpTrace->Trace(sID, COMMENT("Tab In Numbering")); 100 break; 101 case eNegativeVertPlacement: 102 mpTrace->Trace(sID, 103 COMMENT("Negative Vertical Placement")); 104 break; 105 case eAutoColorBg: 106 mpTrace->Trace(sID, 107 COMMENT("Bad Background for Autocolour")); 108 break; 109 case eTooWideAsChar: 110 mpTrace->Trace(sID, 111 COMMENT("Inline wider than TextArea")); 112 break; 113 case eAnimatedText: 114 mpTrace->Trace(sID, 115 COMMENT("Animated Text")); 116 break; 117 case eDontAddSpaceForEqualStyles: 118 mpTrace->Trace(sID, 119 COMMENT("Don't Add Space between Equal Style")); 120 break; 121 case eBorderDistOutside: 122 mpTrace->Trace(sID, 123 COMMENT("Word draws the border outside")); 124 break; 125 case eContainsVisualBasic: 126 mpTrace->Trace(sID, COMMENT("Contains VBA")); 127 break; 128 case eContainsWordBasic: 129 mpTrace->Trace(sID, COMMENT("Contains Word Basic")); 130 break; 131 default: 132 mpTrace->Trace(sID, COMMENT("UNKNOWN")); 133 break; 134 } 135 } 136 GetContext(Environment eContext) const137 rtl::OUString Tracer::GetContext(Environment eContext) const 138 { 139 rtl::OUString sContext; 140 switch (eContext) 141 { 142 case eMacros: 143 case eDocumentProperties: 144 sContext = C2O("Global"); 145 break; 146 case eMainText: 147 sContext = C2O("Text"); 148 break; 149 case eSubDoc: 150 sContext = C2O("Text"); 151 break; 152 case eTable: 153 sContext = C2O("Table"); 154 break; 155 default: 156 sContext = C2O("UNKNOWN"); 157 break; 158 } 159 return sContext; 160 } 161 GetDetails(Environment eContext) const162 rtl::OUString Tracer::GetDetails(Environment eContext) const 163 { 164 rtl::OUString sDetails; 165 switch (eContext) 166 { 167 case eDocumentProperties: 168 sDetails = C2O("Document Properties"); 169 break; 170 case eMacros: 171 sDetails = C2O("Macros"); 172 break; 173 case eMainText: 174 sDetails = C2O("MainDocument"); 175 break; 176 case eSubDoc: 177 sDetails = C2O("Unknown Subdocument"); 178 break; 179 default: 180 sDetails = C2O("UNKNOWN"); 181 break; 182 } 183 return sDetails; 184 } 185 EnterEnvironment(Environment eContext)186 void Tracer::EnterEnvironment(Environment eContext) 187 { 188 mpTrace->AddAttribute(GetContext(eContext), GetDetails(eContext)); 189 } 190 EnterEnvironment(Environment eContext,const rtl::OUString & rDetails)191 void Tracer::EnterEnvironment(Environment eContext, 192 const rtl::OUString &rDetails) 193 { 194 mpTrace->AddAttribute(GetContext(eContext), rDetails); 195 } 196 LeaveEnvironment(Environment eContext)197 void Tracer::LeaveEnvironment(Environment eContext) 198 { 199 mpTrace->RemoveAttribute(GetContext(eContext)); 200 } 201 } 202 } 203 204 /* vi:set tabstop=4 shiftwidth=4 expandtab: */ 205