khtml Library API Documentation

kjs_range.cpp

00001 // -*- c-basic-offset: 2 -*-
00002 /*
00003  *  This file is part of the KDE libraries
00004  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
00005  *
00006  *  This library is free software; you can redistribute it and/or
00007  *  modify it under the terms of the GNU Library General Public
00008  *  License as published by the Free Software Foundation; either
00009  *  version 2 of the License, or (at your option) any later version.
00010  *
00011  *  This library is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  *  Library General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU Library General Public
00017  *  License along with this library; if not, write to the Free Software
00018  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  */
00020 
00021 #include "kjs_range.h"
00022 #include "kjs_range.lut.h"
00023 #include <kdebug.h>
00024 
00025 using namespace KJS;
00026 
00027 // -------------------------------------------------------------------------
00028 
00029 const ClassInfo DOMRange::info = { "Range", 0, &DOMRangeTable, 0 };
00030 /*
00031 @begin DOMRangeTable 7
00032   startContainer    DOMRange::StartContainer    DontDelete|ReadOnly
00033   startOffset       DOMRange::StartOffset       DontDelete|ReadOnly
00034   endContainer      DOMRange::EndContainer      DontDelete|ReadOnly
00035   endOffset     DOMRange::EndOffset     DontDelete|ReadOnly
00036   collapsed     DOMRange::Collapsed     DontDelete|ReadOnly
00037   commonAncestorContainer DOMRange::CommonAncestorContainer DontDelete|ReadOnly
00038 @end
00039 @begin DOMRangeProtoTable 17
00040   setStart      DOMRange::SetStart      DontDelete|Function 2
00041   setEnd        DOMRange::SetEnd        DontDelete|Function 2
00042   setStartBefore    DOMRange::SetStartBefore    DontDelete|Function 1
00043   setStartAfter     DOMRange::SetStartAfter     DontDelete|Function 1
00044   setEndBefore      DOMRange::SetEndBefore      DontDelete|Function 1
00045   setEndAfter       DOMRange::SetEndAfter       DontDelete|Function 1
00046   collapse      DOMRange::Collapse      DontDelete|Function 1
00047   selectNode        DOMRange::SelectNode        DontDelete|Function 1
00048   selectNodeContents    DOMRange::SelectNodeContents    DontDelete|Function 1
00049   compareBoundaryPoints DOMRange::CompareBoundaryPoints DontDelete|Function 2
00050   deleteContents    DOMRange::DeleteContents    DontDelete|Function 0
00051   extractContents   DOMRange::ExtractContents   DontDelete|Function 0
00052   cloneContents     DOMRange::CloneContents     DontDelete|Function 0
00053   insertNode        DOMRange::InsertNode        DontDelete|Function 1
00054   surroundContents  DOMRange::SurroundContents  DontDelete|Function 1
00055   cloneRange        DOMRange::CloneRange        DontDelete|Function 0
00056   toString      DOMRange::ToString      DontDelete|Function 0
00057   detach        DOMRange::Detach        DontDelete|Function 0
00058 @end
00059 */
00060 DEFINE_PROTOTYPE("DOMRange",DOMRangeProto)
00061 IMPLEMENT_PROTOFUNC_DOM(DOMRangeProtoFunc)
00062 IMPLEMENT_PROTOTYPE(DOMRangeProto,DOMRangeProtoFunc)
00063 
00064 DOMRange::DOMRange(ExecState *exec, DOM::Range r)
00065  : DOMObject(DOMRangeProto::self(exec)), range(r) {}
00066 
00067 DOMRange::~DOMRange()
00068 {
00069   ScriptInterpreter::forgetDOMObject(range.handle());
00070 }
00071 
00072 Value DOMRange::tryGet(ExecState *exec, const UString &p) const
00073 {
00074   return DOMObjectLookupGetValue<DOMRange,DOMObject>(exec,p,&DOMRangeTable,this);
00075 }
00076 
00077 Value DOMRange::getValueProperty(ExecState *exec, int token) const
00078 {
00079   switch (token) {
00080   case StartContainer:
00081     return getDOMNode(exec,range.startContainer());
00082   case StartOffset:
00083     return Number(range.startOffset());
00084   case EndContainer:
00085     return getDOMNode(exec,range.endContainer());
00086   case EndOffset:
00087     return Number(range.endOffset());
00088   case Collapsed:
00089     return Boolean(range.collapsed());
00090   case CommonAncestorContainer: {
00091     DOM::Range range2 = range; // avoid const error
00092     return getDOMNode(exec,range2.commonAncestorContainer());
00093   }
00094   default:
00095     kdWarning() << "Unhandled token in DOMRange::getValueProperty : " << token << endl;
00096     return Value();
00097   }
00098 }
00099 
00100 Value DOMRangeProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
00101 {
00102   KJS_CHECK_THIS( KJS::DOMRange, thisObj );
00103   DOM::Range range = static_cast<DOMRange *>(thisObj.imp())->toRange();
00104   Value result;
00105 
00106   switch (id) {
00107     case DOMRange::SetStart:
00108       range.setStart(toNode(args[0]),args[1].toInteger(exec));
00109       result = Undefined();
00110       break;
00111     case DOMRange::SetEnd:
00112       range.setEnd(toNode(args[0]),args[1].toInteger(exec));
00113       result = Undefined();
00114       break;
00115     case DOMRange::SetStartBefore:
00116       range.setStartBefore(toNode(args[0]));
00117       result = Undefined();
00118       break;
00119     case DOMRange::SetStartAfter:
00120       range.setStartAfter(toNode(args[0]));
00121       result = Undefined();
00122       break;
00123     case DOMRange::SetEndBefore:
00124       range.setEndBefore(toNode(args[0]));
00125       result = Undefined();
00126       break;
00127     case DOMRange::SetEndAfter:
00128       range.setEndAfter(toNode(args[0]));
00129       result = Undefined();
00130       break;
00131     case DOMRange::Collapse:
00132       range.collapse(args[0].toBoolean(exec));
00133       result = Undefined();
00134       break;
00135     case DOMRange::SelectNode:
00136       range.selectNode(toNode(args[0]));
00137       result = Undefined();
00138       break;
00139     case DOMRange::SelectNodeContents:
00140       range.selectNodeContents(toNode(args[0]));
00141       result = Undefined();
00142       break;
00143     case DOMRange::CompareBoundaryPoints:
00144       result = Number(range.compareBoundaryPoints(static_cast<DOM::Range::CompareHow>(args[0].toInteger(exec)),toRange(args[1])));
00145       break;
00146     case DOMRange::DeleteContents:
00147       range.deleteContents();
00148       result = Undefined();
00149       break;
00150     case DOMRange::ExtractContents:
00151       result = getDOMNode(exec,range.extractContents());
00152       break;
00153     case DOMRange::CloneContents:
00154       result = getDOMNode(exec,range.cloneContents());
00155       break;
00156     case DOMRange::InsertNode:
00157       range.insertNode(toNode(args[0]));
00158       result = Undefined();
00159       break;
00160     case DOMRange::SurroundContents:
00161       range.surroundContents(toNode(args[0]));
00162       result = Undefined();
00163       break;
00164     case DOMRange::CloneRange:
00165       result = getDOMRange(exec,range.cloneRange());
00166       break;
00167     case DOMRange::ToString:
00168       result = getString(range.toString());
00169       break;
00170     case DOMRange::Detach:
00171       range.detach();
00172       result = Undefined();
00173       break;
00174   };
00175 
00176   return result;
00177 }
00178 
00179 Value KJS::getDOMRange(ExecState *exec, DOM::Range r)
00180 {
00181   return cacheDOMObject<DOM::Range, KJS::DOMRange>(exec, r);
00182 }
00183 
00184 // -------------------------------------------------------------------------
00185 
00186 const ClassInfo RangeConstructor::info = { "RangeConstructor", 0, &RangeConstructorTable, 0 };
00187 /*
00188 @begin RangeConstructorTable 5
00189   START_TO_START    DOM::Range::START_TO_START  DontDelete|ReadOnly
00190   START_TO_END      DOM::Range::START_TO_END    DontDelete|ReadOnly
00191   END_TO_END        DOM::Range::END_TO_END      DontDelete|ReadOnly
00192   END_TO_START      DOM::Range::END_TO_START    DontDelete|ReadOnly
00193 @end
00194 */
00195 
00196 RangeConstructor::RangeConstructor(ExecState *exec)
00197   : DOMObject(exec->interpreter()->builtinObjectPrototype()) { }
00198 
00199 Value RangeConstructor::tryGet(ExecState *exec, const UString &p) const
00200 {
00201   return DOMObjectLookupGetValue<RangeConstructor,DOMObject>(exec,p,&RangeConstructorTable,this);
00202 }
00203 
00204 Value RangeConstructor::getValueProperty(ExecState *, int token) const
00205 {
00206   return Number(token);
00207 }
00208 
00209 Value KJS::getRangeConstructor(ExecState *exec)
00210 {
00211   return cacheGlobalObject<RangeConstructor>(exec, "[[range.constructor]]");
00212 }
00213 
00214 
00215 DOM::Range KJS::toRange(const Value& val)
00216 {
00217   Object obj = Object::dynamicCast(val);
00218   if (obj.isNull() || !obj.inherits(&DOMRange::info))
00219     return DOM::Range();
00220 
00221   const DOMRange *dobj = static_cast<const DOMRange*>(obj.imp());
00222   return dobj->toRange();
00223 }
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.4.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 27 22:16:38 2005 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001