From e05303e60dc3f7247e6214585212dfff6b424374 Mon Sep 17 00:00:00 2001 From: jevering Date: Thu, 14 May 1998 21:47:33 +0000 Subject: [PATCH] Fixed robot walking somewhat.. needs more cleaning. --- htmlparser/robot/nsDebugRobot.cpp | 60 ++++++++++++++++++++++-- parser/htmlparser/robot/nsDebugRobot.cpp | 60 ++++++++++++++++++++++-- 2 files changed, 110 insertions(+), 10 deletions(-) diff --git a/htmlparser/robot/nsDebugRobot.cpp b/htmlparser/robot/nsDebugRobot.cpp index 21cdc1e1c3ea..7b1b61a76249 100644 --- a/htmlparser/robot/nsDebugRobot.cpp +++ b/htmlparser/robot/nsDebugRobot.cpp @@ -36,14 +36,58 @@ public: NS_DECL_ISUPPORTS NS_IMETHOD ProcessLink(const nsString& aURLSpec); + }; +static nsVoidArray * g_workList; +static nsVoidArray * g_duplicateList; +static int g_iProcessed; +static int g_iMaxProcess = 5000; +static PRBool g_bHitTop; + NS_IMPL_ISUPPORTS(RobotSinkObserver, kIRobotSinkObserverIID); NS_IMETHODIMP RobotSinkObserver::ProcessLink(const nsString& aURLSpec) { - fputs(aURLSpec, stdout); - printf("\n"); + if (!g_bHitTop) { + + PRInt32 nCount = g_duplicateList->Count(); + if (nCount > 0) + { + for (PRInt32 n = 0; n < nCount; n++) + { + nsString * pstr = (nsString *)g_duplicateList->ElementAt(n); + if (pstr->Equals(aURLSpec)) { + fputs ("DR: (duplicate found '",stdout); + fputs (aURLSpec,stdout); + fputs ("')\n",stdout); + return NS_OK; + } + } + } + g_duplicateList->AppendElement(new nsString(aURLSpec)); + nsAutoString str; + str.Truncate(); + nsString(aURLSpec).Left(str,5); + if (str.Equals("http:")) { + char str_num[25]; + g_iProcessed++; + if (g_iProcessed == g_iMaxProcess) + g_bHitTop = PR_TRUE; + sprintf(str_num, "%d", g_iProcessed); + g_workList->AppendElement(new nsString(aURLSpec)); + fputs("DebugRobot ",stdout); + fputs(str_num, stdout); + fputs(": ",stdout); + fputs(aURLSpec,stdout); + fputs("\n", stdout); + } + else { + fputs ("DR: (cannot process URL types '",stdout); + fputs (aURLSpec,stdout); + fputs ("')\n",stdout); + } + } return NS_OK; } @@ -51,16 +95,22 @@ NS_IMETHODIMP RobotSinkObserver::ProcessLink(const nsString& aURLSpec) extern "C" NS_EXPORT int DebugRobot(nsVoidArray * workList) { + if (nsnull==workList) + return -1; + g_iProcessed = 0; + g_bHitTop = PR_FALSE; + g_duplicateList = new nsVoidArray(); RobotSinkObserver* myObserver = new RobotSinkObserver(); NS_ADDREF(myObserver); + g_workList = workList; for (;;) { - PRInt32 n = workList->Count(); + PRInt32 n = g_workList->Count(); if (0 == n) { break; } - nsString* urlName = (nsString*) workList->ElementAt(n - 1); - workList->RemoveElementAt(n - 1); + nsString* urlName = (nsString*) g_workList->ElementAt(n - 1); + g_workList->RemoveElementAt(n - 1); // Create url nsIURL* url; diff --git a/parser/htmlparser/robot/nsDebugRobot.cpp b/parser/htmlparser/robot/nsDebugRobot.cpp index 21cdc1e1c3ea..7b1b61a76249 100644 --- a/parser/htmlparser/robot/nsDebugRobot.cpp +++ b/parser/htmlparser/robot/nsDebugRobot.cpp @@ -36,14 +36,58 @@ public: NS_DECL_ISUPPORTS NS_IMETHOD ProcessLink(const nsString& aURLSpec); + }; +static nsVoidArray * g_workList; +static nsVoidArray * g_duplicateList; +static int g_iProcessed; +static int g_iMaxProcess = 5000; +static PRBool g_bHitTop; + NS_IMPL_ISUPPORTS(RobotSinkObserver, kIRobotSinkObserverIID); NS_IMETHODIMP RobotSinkObserver::ProcessLink(const nsString& aURLSpec) { - fputs(aURLSpec, stdout); - printf("\n"); + if (!g_bHitTop) { + + PRInt32 nCount = g_duplicateList->Count(); + if (nCount > 0) + { + for (PRInt32 n = 0; n < nCount; n++) + { + nsString * pstr = (nsString *)g_duplicateList->ElementAt(n); + if (pstr->Equals(aURLSpec)) { + fputs ("DR: (duplicate found '",stdout); + fputs (aURLSpec,stdout); + fputs ("')\n",stdout); + return NS_OK; + } + } + } + g_duplicateList->AppendElement(new nsString(aURLSpec)); + nsAutoString str; + str.Truncate(); + nsString(aURLSpec).Left(str,5); + if (str.Equals("http:")) { + char str_num[25]; + g_iProcessed++; + if (g_iProcessed == g_iMaxProcess) + g_bHitTop = PR_TRUE; + sprintf(str_num, "%d", g_iProcessed); + g_workList->AppendElement(new nsString(aURLSpec)); + fputs("DebugRobot ",stdout); + fputs(str_num, stdout); + fputs(": ",stdout); + fputs(aURLSpec,stdout); + fputs("\n", stdout); + } + else { + fputs ("DR: (cannot process URL types '",stdout); + fputs (aURLSpec,stdout); + fputs ("')\n",stdout); + } + } return NS_OK; } @@ -51,16 +95,22 @@ NS_IMETHODIMP RobotSinkObserver::ProcessLink(const nsString& aURLSpec) extern "C" NS_EXPORT int DebugRobot(nsVoidArray * workList) { + if (nsnull==workList) + return -1; + g_iProcessed = 0; + g_bHitTop = PR_FALSE; + g_duplicateList = new nsVoidArray(); RobotSinkObserver* myObserver = new RobotSinkObserver(); NS_ADDREF(myObserver); + g_workList = workList; for (;;) { - PRInt32 n = workList->Count(); + PRInt32 n = g_workList->Count(); if (0 == n) { break; } - nsString* urlName = (nsString*) workList->ElementAt(n - 1); - workList->RemoveElementAt(n - 1); + nsString* urlName = (nsString*) g_workList->ElementAt(n - 1); + g_workList->RemoveElementAt(n - 1); // Create url nsIURL* url;