Open main menu

CDOT Wiki β

Vlam6

Joined 15 January 2007
Revision as of 21:21, 11 November 2007 by Vlam6 (talk | contribs) (Release 0.1)

About Me

  • Name: Vincent Lam.
  • Program: Bachelor of Software Development.

Contacts

Open Source Projects

Automated Localization Build Tool

  • we are in currently working on our 0.2 release and are anticipating completion of the release by the end of october. We plan to start the 0.3 release in November.
Release 0.1
Release 0.2
Release 0.3

Contributions

Desktop Social Networking Integration

Desktop Social Networking Integration,

  • Research on SQLite Client
  • Found a SQLite Client
  • Setup the client
  • Tested the client
  • Tried to get his code to compile

Full-Text History Search Extension

Full-Text History Search extension

  • Research on how to create an extension
  • Research on CVS Editor
  • Found an free CVS Editor
  • Research on History Search

FSOSS Report

Lab

Thunderbird Fix

? labpatch.txt
? objdir-tbird-debug
? security/nss/cmd/shlibsign/NONE
? security/nss/cmd/shlibsign/mangle/NONE
? security/nss/lib/ckfw/builtins/NONE
? security/nss/lib/ckfw/capi/NONE
? security/nss/lib/freebl/NONE
? security/nss/lib/nss/NONE
? security/nss/lib/smime/NONE
? security/nss/lib/softoken/NONE
? security/nss/lib/softoken/legacydb/NONE
? security/nss/lib/ssl/NONE
Index: netwerk/streamconv/converters/mozTXTToHTMLConv.cpp
===================================================================
RCS file: /cvsroot/mozilla/netwerk/streamconv/converters/mozTXTToHTMLConv.cpp,v
retrieving revision 1.85
diff -u -8 -p -r1.85 mozTXTToHTMLConv.cpp
--- netwerk/streamconv/converters/mozTXTToHTMLConv.cpp	11 Mar 2007 00:17:00 -0000	1.85
+++ netwerk/streamconv/converters/mozTXTToHTMLConv.cpp	11 Nov 2007 23:37:50 -0000
@@ -1,42 +1,42 @@
 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* ***** BEGIN LICENSE BLOCK *****
- * 
+ *
  * The "License" shall be the Mozilla Public License Version 1.1, except
  * Sections 6.2 and 11, but with the addition of the below defined Section 14.
  * You may obtain a copy of the Mozilla Public License Version 1.1 at
  * <http://www.mozilla.org/MPL/>. The contents of this file are subject to the
  * License; you may not use this file except in compliance with the License.
- * 
+ *
  * Section 14: MISCELLANEOUS.
  * This License represents the complete agreement concerning subject matter
  * hereof. If any provision of this License is held to be unenforceable, such
  * provision shall be reformed only to the extent necessary to make it
  * enforceable. This License shall be governed by German law provisions. Any
  * litigation relating to this License shall be subject to German jurisdiction.
- * 
+ *
  * Once Covered Code has been published under a particular version of the
  * License, You may always continue to use it under the terms of that version.
  + The Initial Developer and no one else has the right to modify the terms
  * applicable to Covered Code created under this License.
  * (End of Section 14)
- * 
+ *
  * Software distributed under the License is distributed on an "AS IS"
  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  * License for the specific language governing rights and limitations
  * under the License.
- * 
+ *
  * The Original Code is the Mozilla Text to HTML converter code.
- * 
+ *
  * The Initial Developer of the Original Code is
  * Ben Bucksch <http://www.bucksch.org>.
  * Portions created by Ben Bucksch are Copyright
  * (C) 1999, 2000 Ben Bucksch. All Rights Reserved.
- * 
+ *
  * Contributor(s):
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  * in which case the provisions of the GPL or the LGPL are applicable instead
  * of those above. If you wish to allow use of your version of this file only
  * under the terms of either the GPL or the LGPL, and not to allow others to
@@ -69,17 +69,17 @@ const PRFloat64 growthRate = 1.2;
 // 0xA0's and a single ending space, so need to treat 0xA0's as spaces.
 // 0xA0 is the Latin1/Unicode character for "non-breaking space (nbsp)"
 // Also recognize the Japanese ideographic space 0x3000 as a space.
 static inline PRBool IsSpace(const PRUnichar aChar)
 {
   return (nsCRT::IsAsciiSpace(aChar) || aChar == 0xA0 || aChar == 0x3000);
 }
 
-// Escape Char will take ch, escape it and append the result to 
+// Escape Char will take ch, escape it and append the result to
 // aStringToAppendTo
 void
 mozTXTToHTMLConv::EscapeChar(const PRUnichar ch, nsString& aStringToAppendTo)
 {
     switch (ch)
     {
     case '<':
       aStringToAppendTo.AppendLiteral("<");
@@ -94,17 +94,17 @@ mozTXTToHTMLConv::EscapeChar(const PRUni
       aStringToAppendTo += ch;
     }
 
     return;
 }
 
 // EscapeStr takes the passed in string and
 // escapes it IN PLACE.
-void 
+void
 mozTXTToHTMLConv::EscapeStr(nsString& aInString)
 {
   // the replace substring routines
   // don't seem to work if you have a character
   // in the in string that is also in the replacement
   // string! =(
   //aInString.ReplaceSubstring("&", "&");
   //aInString.ReplaceSubstring("<", "<");
@@ -129,17 +129,17 @@ mozTXTToHTMLConv::EscapeStr(nsString& aI
       i += 5; // skip past the integers we just added
       break;
     default:
       i++;
     }
   }
 }
 
-void 
+void
 mozTXTToHTMLConv::UnescapeStr(const PRUnichar * aInString, PRInt32 aStartPos, PRInt32 aLength, nsString& aOutString)
 {
   const PRUnichar * subString = nsnull;
   for (PRUint32 i = aStartPos; PRInt32(i) - aStartPos < aLength;)
   {
     PRInt32 remainingChars = i - aStartPos;
     if (aInString[i] == '&')
     {
@@ -169,44 +169,44 @@ mozTXTToHTMLConv::UnescapeStr(const PRUn
     {
       aOutString += aInString[i];
       i++;
     }
   }
 }
 
 void
-mozTXTToHTMLConv::CompleteAbbreviatedURL(const PRUnichar * aInString, PRInt32 aInLength, 
+mozTXTToHTMLConv::CompleteAbbreviatedURL(const PRUnichar * aInString, PRInt32 aInLength,
                                          const PRUint32 pos, nsString& aOutString)
 {
   NS_ASSERTION(pos < aInLength, "bad args to CompleteAbbreviatedURL, see bug #190851");
   if (pos >= aInLength)
     return;
 
   if (aInString[pos] == '@')
   {
     // only pre-pend a mailto url if the string contains a .domain in it..
     //i.e. we want to linkify johndoe@foo.com but not "let's meet @8pm"
     nsDependentString inString(aInString, aInLength);
-    if (inString.FindChar('.', pos) != kNotFound) // if we have a '.' after the @ sign....
+    if (inString.FindChar('.', pos) != kNotFound  && (inString.Find("..", 0) == kNotFound))    { // if we have a '.' after the @ sign.... and make sure there is no double '.' anywhere
     {
       aOutString.AssignLiteral("mailto:");
       aOutString += aInString;
     }
   }
   else if (aInString[pos] == '.')
   {
     if (ItMatchesDelimited(aInString, aInLength,
                            NS_LITERAL_STRING("www.").get(), 4, LT_IGNORE, LT_IGNORE))
     {
       aOutString.AssignLiteral("http://");
       aOutString += aInString;
     }
     else if (ItMatchesDelimited(aInString,aInLength, NS_LITERAL_STRING("ftp.").get(), 4, LT_IGNORE, LT_IGNORE))
-    { 
+    {
       aOutString.AssignLiteral("ftp://");
       aOutString += aInString;
     }
   }
 }
 
 PRBool
 mozTXTToHTMLConv::FindURLStart(const PRUnichar * aInString, PRInt32 aInLength,
@@ -360,17 +360,17 @@ mozTXTToHTMLConv::FindURLEnd(const PRUni
       return PR_FALSE;
   }
   default:
     return PR_FALSE;
   } //switch
 }
 
 void
-mozTXTToHTMLConv::CalculateURLBoundaries(const PRUnichar * aInString, PRInt32 aInStringLength, 
+mozTXTToHTMLConv::CalculateURLBoundaries(const PRUnichar * aInString, PRInt32 aInStringLength,
      const PRUint32 pos, const PRUint32 whathasbeendone,
      const modetype check, const PRUint32 start, const PRUint32 end,
      nsString& txtURL, nsString& desc,
      PRInt32& replaceBefore, PRInt32& replaceAfter)
 {
   PRUint32 descstart = start;
   switch(check)
   {
@@ -385,17 +385,17 @@ mozTXTToHTMLConv::CalculateURLBoundaries
     descstart = start - 1;
     desc.Append(&aInString[descstart], end - descstart + 2); // include brackets
     replaceAfter = end - pos + 1;
   } break;
   case freetext:
   case abbreviated:
   {
     descstart = start;
-    desc.Append(&aInString[descstart], end - start + 1); // don't include brackets  
+    desc.Append(&aInString[descstart], end - start + 1); // don't include brackets
     replaceAfter = end - pos;
   } break;
   default: break;
   } //switch
 
   EscapeStr(desc);
 
   txtURL.Append(&aInString[start], end - start + 1);
@@ -414,17 +414,17 @@ PRBool mozTXTToHTMLConv::ShouldLinkify(c
     return PR_FALSE;
 
   nsCAutoString scheme;
   nsresult rv = mIOService->ExtractScheme(aURL, scheme);
   if(NS_FAILED(rv))
     return PR_FALSE;
 
   // Get the handler for this scheme.
-  nsCOMPtr<nsIProtocolHandler> handler;    
+  nsCOMPtr<nsIProtocolHandler> handler;
   rv = mIOService->GetProtocolHandler(scheme.get(), getter_AddRefs(handler));
   if(NS_FAILED(rv))
     return PR_FALSE;
 
   // Is it an external protocol handler? If not, linkify it.
   nsCOMPtr<nsIExternalProtocolHandler> externalHandler = do_QueryInterface(handler, &rv);
   if (!externalHandler)
    return PR_TRUE; // handler is built-in, linkify it!
@@ -440,17 +440,17 @@ mozTXTToHTMLConv::CheckURLAndCreateHTML(
      const nsString& txtURL, const nsString& desc, const modetype mode,
      nsString& outputHTML)
 {
   // Create *uri from txtURL
   nsCOMPtr<nsIURI> uri;
   nsresult rv = NS_OK;
   if (!mIOService)
     mIOService = do_GetService(kIOServiceCID, &rv);
-  
+
   if (NS_FAILED(rv) || !mIOService)
     return PR_FALSE;
 
   // See if the url should be linkified.
   NS_ConvertUTF16toUTF8 utf8URL(txtURL);
   if (!ShouldLinkify(utf8URL))
     return PR_FALSE;
 
@@ -639,17 +639,17 @@ mozTXTToHTMLConv::ItMatchesDelimited(con
                                    nsCaseInsensitiveStringComparator())
     )
     return PR_FALSE;
 
   return PR_TRUE;
 }
 
 PRUint32
-mozTXTToHTMLConv::NumberOfMatches(const PRUnichar * aInString, PRInt32 aInStringLength, 
+mozTXTToHTMLConv::NumberOfMatches(const PRUnichar * aInString, PRInt32 aInStringLength,
      const PRUnichar* rep, PRInt32 aRepLen, LIMTYPE before, LIMTYPE after)
 {
   PRUint32 result = 0;
 
   for (PRInt32 i = 0; i < aInStringLength; i++)
   {
     const PRUnichar * indexIntoString = &aInString[i];
     if (ItMatchesDelimited(indexIntoString, aInStringLength - i, rep, aRepLen, before, after))
@@ -658,17 +658,17 @@ mozTXTToHTMLConv::NumberOfMatches(const 
   return result;
 }
 
 
 // NOTE: the converted html for the phrase is appended to aOutString
 // tagHTML and attributeHTML are plain ASCII (literal strings, in fact)
 PRBool
 mozTXTToHTMLConv::StructPhraseHit(const PRUnichar * aInString, PRInt32 aInStringLength, PRBool col0,
-     const PRUnichar* tagTXT, PRInt32 aTagTXTLen, 
+     const PRUnichar* tagTXT, PRInt32 aTagTXTLen,
      const char* tagHTML, const char* attributeHTML,
      nsString& aOutString, PRUint32& openTags)
 {
   /* We're searching for the following pattern:
      LT_DELIMITER - "*" - ALPHA -
      [ some text (maybe more "*"-pairs) - ALPHA ] "*" - LT_DELIMITER.
      <strong> is only inserted, if existance of a pair could be verified
      We use the first opening/closing tag, if we can choose */
@@ -679,19 +679,19 @@ mozTXTToHTMLConv::StructPhraseHit(const 
   {
     newOffset = &aInString[1];
     newLength = aInStringLength - 1;
   }
 
   // opening tag
   if
     (
-      ItMatchesDelimited(aInString, aInStringLength, tagTXT, aTagTXTLen, 
+      ItMatchesDelimited(aInString, aInStringLength, tagTXT, aTagTXTLen,
            (col0 ? LT_IGNORE : LT_DELIMITER), LT_ALPHA) // is opening tag
-        && NumberOfMatches(newOffset, newLength, tagTXT, aTagTXTLen, 
+        && NumberOfMatches(newOffset, newLength, tagTXT, aTagTXTLen,
               LT_ALPHA, LT_DELIMITER)  // remaining closing tags
               > openTags
     )
   {
     openTags++;
     aOutString.AppendLiteral("<");
     aOutString.AppendASCII(tagHTML);
     aOutString.Append(PRUnichar(' '));
@@ -723,17 +723,17 @@ PRBool
 mozTXTToHTMLConv::SmilyHit(const PRUnichar * aInString, PRInt32 aLength, PRBool col0,
          const char* tagTXT, const char* imageName,
          nsString& outputHTML, PRInt32& glyphTextLen)
 {
   if ( !aInString || !tagTXT || !imageName )
       return PR_FALSE;
 
   PRInt32  tagLen = nsCRT::strlen(tagTXT);
- 
+
   PRUint32 delim = (col0 ? 0 : 1) + tagLen;
 
   if
     (
       (col0 || IsSpace(aInString[0]))
         &&
         (
           aLength <= PRInt32(delim) ||
@@ -746,47 +746,47 @@ mozTXTToHTMLConv::SmilyHit(const PRUnich
               aInString[delim] == ';' ||
               aInString[delim] == '8' ||
               aInString[delim] == '>' ||
               aInString[delim] == '!' ||
               aInString[delim] == '?'
             )
             && IsSpace(aInString[delim + 1])
         )
-        && ItMatchesDelimited(aInString, aLength, NS_ConvertASCIItoUTF16(tagTXT).get(), tagLen, 
+        && ItMatchesDelimited(aInString, aLength, NS_ConvertASCIItoUTF16(tagTXT).get(), tagLen,
                               col0 ? LT_IGNORE : LT_DELIMITER, LT_IGNORE)
 	        // Note: tests at different pos for LT_IGNORE and LT_DELIMITER
     )
   {
     if (!col0)
     {
       outputHTML.Truncate();
       outputHTML.Append(PRUnichar(' '));
     }
 
     outputHTML.AppendLiteral("<span class=\""); // <span class="
     AppendASCIItoUTF16(imageName, outputHTML);  // e.g. smiley-frown
-    outputHTML.AppendLiteral("\" title=\"");    // " title="     
+    outputHTML.AppendLiteral("\" title=\"");    // " title="
     AppendASCIItoUTF16(tagTXT, outputHTML);     // smiley tooltip
-    outputHTML.AppendLiteral("\"><span>");      // "><span>      
-    AppendASCIItoUTF16(tagTXT, outputHTML);     // original text 
+    outputHTML.AppendLiteral("\"><span>");      // "><span>
+    AppendASCIItoUTF16(tagTXT, outputHTML);     // original text
     outputHTML.AppendLiteral("</span></span>"); // </span></span>
     glyphTextLen = (col0 ? 0 : 1) + tagLen;
     return PR_TRUE;
   }
 
   return PR_FALSE;
 }
 
 // the glyph is appended to aOutputString instead of the original string...
 PRBool
 mozTXTToHTMLConv::GlyphHit(const PRUnichar * aInString, PRInt32 aInLength, PRBool col0,
          nsString& aOutputString, PRInt32& glyphTextLen)
 {
-  PRUnichar text0 = aInString[0]; 
+  PRUnichar text0 = aInString[0];
   PRUnichar text1 = aInString[1];
   PRUnichar firstChar = (col0 ? text0 : text1);
 
   // temporary variable used to store the glyph html text
   nsAutoString outputHTML;
   PRBool bTestSmilie;
   PRBool bArg;
   int i;
@@ -813,116 +813,116 @@ mozTXTToHTMLConv::GlyphHit(const PRUnich
         bTestSmilie = PR_TRUE;
         bArg = PR_FALSE;
     }
     if ( bTestSmilie && (
           SmilyHit(aInString, aInLength, bArg,
                    ":-)",
                    "moz-smiley-s1", // smile
                    outputHTML, glyphTextLen) ||
-  
+
           SmilyHit(aInString, aInLength, bArg,
                    ":)",
                    "moz-smiley-s1", // smile
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-D",
                    "moz-smiley-s5", // laughing
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-(",
                    "moz-smiley-s2", // frown
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ":(",
                    "moz-smiley-s2", // frown
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-[",
                    "moz-smiley-s6", // embarassed
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ";-)",
                    "moz-smiley-s3", // wink
                    outputHTML, glyphTextLen) ||
 
           SmilyHit(aInString, aInLength, col0,
                    ";)",
                    "moz-smiley-s3", // wink
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-\\",
                    "moz-smiley-s7", // undecided
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-P",
                    "moz-smiley-s4", // tongue
                    outputHTML, glyphTextLen) ||
-                   
+
           SmilyHit(aInString, aInLength, bArg,
                    ";-P",
                    "moz-smiley-s4", // tongue
-                   outputHTML, glyphTextLen) ||  
-         
+                   outputHTML, glyphTextLen) ||
+
           SmilyHit(aInString, aInLength, bArg,
                    "=-O",
                    "moz-smiley-s8", // surprise
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-*",
                    "moz-smiley-s9", // kiss
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    ">:o",
                    "moz-smiley-s10", // yell
                    outputHTML, glyphTextLen) ||
-          
+
           SmilyHit(aInString, aInLength, bArg,
                    ">:-o",
                    "moz-smiley-s10", // yell
                    outputHTML, glyphTextLen) ||
-        
+
           SmilyHit(aInString, aInLength, bArg,
                    "8-)",
                    "moz-smiley-s11", // cool
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-$",
                    "moz-smiley-s12", // money
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-!",
                    "moz-smiley-s13", // foot
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    "O:-)",
                    "moz-smiley-s14", // innocent
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    ":'(",
                    "moz-smiley-s15", // cry
                    outputHTML, glyphTextLen) ||
-         
+
           SmilyHit(aInString, aInLength, bArg,
                    ":-X",
                    "moz-smiley-s16", // sealed
-                   outputHTML, glyphTextLen) 
+                   outputHTML, glyphTextLen)
         )
     )
     {
         aOutputString.Append(outputHTML);
         return PR_TRUE;
     }
     i++;
   }
@@ -949,37 +949,37 @@ mozTXTToHTMLConv::GlyphHit(const PRUnich
       aOutputString.AppendLiteral("±");
       glyphTextLen = 3;
       return PR_TRUE;
     }
   }
 
   // x^2  =>  x<sup>2</sup>,   also handle powers x^-2,  x^0.5
   // implement regular expression /[\dA-Za-z\)\]}]\^-?\d+(\.\d+)*[^\dA-Za-z]/
-  if    
+  if
     (
       text1 == '^'
-      && 
+      &&
       (
-        nsCRT::IsAsciiDigit(text0) || nsCRT::IsAsciiAlpha(text0) || 
+        nsCRT::IsAsciiDigit(text0) || nsCRT::IsAsciiAlpha(text0) ||
         text0 == ')' || text0 == ']' || text0 == '}'
       )
       &&
       (
         2 < aInLength && nsCRT::IsAsciiDigit(aInString[2]) ||
         3 < aInLength && aInString[2] == '-' && nsCRT::IsAsciiDigit(aInString[3])
       )
     )
   {
     // Find first non-digit
     PRInt32 delimPos = 3;  // skip "^" and first digit (or '-')
     for (; delimPos < aInLength
            &&
            (
-             nsCRT::IsAsciiDigit(aInString[delimPos]) || 
+             nsCRT::IsAsciiDigit(aInString[delimPos]) ||
              aInString[delimPos] == '.' && delimPos + 1 < aInLength &&
                nsCRT::IsAsciiDigit(aInString[delimPos + 1])
            );
          delimPos++)
       ;
 
     if (delimPos < aInLength && nsCRT::IsAsciiAlpha(aInString[delimPos]))
     {
@@ -1016,17 +1016,17 @@ mozTXTToHTMLConv::GlyphHit(const PRUnich
 /***************************************************************************
   Library-internal Interface
 ****************************************************************************/
 
 mozTXTToHTMLConv::mozTXTToHTMLConv()
 {
 }
 
-mozTXTToHTMLConv::~mozTXTToHTMLConv() 
+mozTXTToHTMLConv::~mozTXTToHTMLConv()
 {
 }
 
 NS_IMPL_ISUPPORTS1(mozTXTToHTMLConv, mozITXTToHTMLConv)
 
 PRInt32
 mozTXTToHTMLConv::CiteLevelTXT(const PRUnichar *line,
 				    PRUint32& logLineStart)
@@ -1214,17 +1214,17 @@ mozTXTToHTMLConv::ScanTXT(const PRUnicha
       i++;
       break;
     }
   }
 }
 
 void
 mozTXTToHTMLConv::ScanHTML(nsString& aInString, PRUint32 whattodo, nsString &aOutString)
-{ 
+{
   // some common variables we were recalculating
   // every time inside the for loop...
   PRInt32 lengthOfInString = aInString.Length();
   const PRUnichar * uniBuffer = aInString.get();
 
 #ifdef DEBUG_BenB_Perf
   PRTime parsing_start = PR_IntervalNow();
 #endif
@@ -1269,18 +1269,18 @@ mozTXTToHTMLConv::ScanHTML(nsString& aIn
       aOutString.Append(&uniBuffer[start], PRUint32(i) - start);
     }
     else
     {
       PRUint32 start = PRUint32(i);
       i = aInString.FindChar('<', i);
       if (i == kNotFound)
         i = lengthOfInString;
-  
-      nsString tempString;     
+
+      nsString tempString;
       tempString.SetCapacity(PRUint32((PRUint32(i) - start) * growthRate));
       UnescapeStr(uniBuffer, start, PRUint32(i) - start, tempString);
       ScanTXT(tempString.get(), tempString.Length(), whattodo, aOutString);
     }
   }
 
 #ifdef DEBUG_BenB_Perf
   printf("ScanHTML time:    %d ms\n", PR_IntervalToMilliseconds(PR_IntervalNow() - parsing_start));

IRC Commands

  • /join #channel <join chann>
  • username: ping <get people attention>
  • username: pong
  • /query username <start a private chat>
  • /join #meeting10 <new room>
  • /me <emote>

Useful Link