Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / xsp / System / Web / Extensions / Script / Serialization / JavaScriptString.cs / 1 / JavaScriptString.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Script.Serialization { using System; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Text; internal class JavaScriptString { private string _s; private int _index; internal JavaScriptString(string s) { _s = s; } internal NullableGetNextNonEmptyChar() { while (_s.Length > _index) { char c = _s[_index++]; if (!Char.IsWhiteSpace(c)) { return c; } } return null; } internal Nullable MoveNext() { if (_s.Length > _index) { return _s[_index++]; } return null; } internal string MoveNext(int count) { if (_s.Length >= _index + count) { string result = _s.Substring(_index, count); _index += count; return result; } return null; } internal void MovePrev() { if (_index > 0) { _index--; } } internal void MovePrev(int count) { while (_index > 0 && count > 0) { _index--; count--; } } private static void AppendCharAsUnicode(StringBuilder builder, char c) { builder.Append("\\u"); builder.AppendFormat(CultureInfo.InvariantCulture, "{0:x4}", (int)c); } [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification="Method would be more complex if split into separate pieces.")] internal static string QuoteString(string value) { StringBuilder b = null; if (String.IsNullOrEmpty(value)) { return String.Empty; } int startIndex = 0; int count = 0; for (int i = 0; i < value.Length; i++) { char c = value[i]; // Append the unhandled characters (that do not require special treament) // to the string builder when special characters are detected. if (c == '\r' || c == '\t' || c == '\"' || c == '\'' || c == '<' || c == '>' || c == '\\' || c == '\n' || c == '\b' || c == '\f' || c < ' ') { if (b == null) { b = new StringBuilder(value.Length + 5); } if (count > 0) { b.Append(value, startIndex, count); } startIndex = i+1; count = 0; } switch (c) { case '\r': b.Append("\\r"); break; case '\t': b.Append("\\t"); break; case '\"': b.Append("\\\""); break; case '\\': b.Append("\\\\"); break; case '\n': b.Append("\\n"); break; case '\b': b.Append("\\b"); break; case '\f': b.Append("\\f"); break; case '\'': case '>': case '<': AppendCharAsUnicode(b, c); break; default: if (c < ' ') { AppendCharAsUnicode(b, c); } else { count++; } break; } } if (b == null) { return value; } if (count > 0) { b.Append(value, startIndex, count); } return b.ToString(); } internal static string QuoteString(string value, bool addQuotes) { string s = QuoteString(value); if (addQuotes) { s = "\"" + s + "\""; } return s; } public override string ToString() { if (_s.Length > _index) { return _s.Substring(_index); } return String.Empty; } internal string GetDebugString(string message) { return message + " (" + _index + "): " + _s; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Script.Serialization { using System; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Text; internal class JavaScriptString { private string _s; private int _index; internal JavaScriptString(string s) { _s = s; } internal NullableGetNextNonEmptyChar() { while (_s.Length > _index) { char c = _s[_index++]; if (!Char.IsWhiteSpace(c)) { return c; } } return null; } internal Nullable MoveNext() { if (_s.Length > _index) { return _s[_index++]; } return null; } internal string MoveNext(int count) { if (_s.Length >= _index + count) { string result = _s.Substring(_index, count); _index += count; return result; } return null; } internal void MovePrev() { if (_index > 0) { _index--; } } internal void MovePrev(int count) { while (_index > 0 && count > 0) { _index--; count--; } } private static void AppendCharAsUnicode(StringBuilder builder, char c) { builder.Append("\\u"); builder.AppendFormat(CultureInfo.InvariantCulture, "{0:x4}", (int)c); } [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification="Method would be more complex if split into separate pieces.")] internal static string QuoteString(string value) { StringBuilder b = null; if (String.IsNullOrEmpty(value)) { return String.Empty; } int startIndex = 0; int count = 0; for (int i = 0; i < value.Length; i++) { char c = value[i]; // Append the unhandled characters (that do not require special treament) // to the string builder when special characters are detected. if (c == '\r' || c == '\t' || c == '\"' || c == '\'' || c == '<' || c == '>' || c == '\\' || c == '\n' || c == '\b' || c == '\f' || c < ' ') { if (b == null) { b = new StringBuilder(value.Length + 5); } if (count > 0) { b.Append(value, startIndex, count); } startIndex = i+1; count = 0; } switch (c) { case '\r': b.Append("\\r"); break; case '\t': b.Append("\\t"); break; case '\"': b.Append("\\\""); break; case '\\': b.Append("\\\\"); break; case '\n': b.Append("\\n"); break; case '\b': b.Append("\\b"); break; case '\f': b.Append("\\f"); break; case '\'': case '>': case '<': AppendCharAsUnicode(b, c); break; default: if (c < ' ') { AppendCharAsUnicode(b, c); } else { count++; } break; } } if (b == null) { return value; } if (count > 0) { b.Append(value, startIndex, count); } return b.ToString(); } internal static string QuoteString(string value, bool addQuotes) { string s = QuoteString(value); if (addQuotes) { s = "\"" + s + "\""; } return s; } public override string ToString() { if (_s.Length > _index) { return _s.Substring(_index); } return String.Empty; } internal string GetDebugString(string message) { return message + " (" + _index + "): " + _s; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PtsPage.cs
- SymbolDocumentInfo.cs
- CreatingCookieEventArgs.cs
- DetailsViewModeEventArgs.cs
- InvalidAsynchronousStateException.cs
- DiscriminatorMap.cs
- RawStylusActions.cs
- VScrollBar.cs
- SettingsPropertyWrongTypeException.cs
- ListControl.cs
- ContextMenuService.cs
- PrincipalPermission.cs
- PerformanceCounterManager.cs
- ReliableSession.cs
- ClientScriptManager.cs
- UnsafeNativeMethods.cs
- SplitterEvent.cs
- SoapAttributes.cs
- DbDataAdapter.cs
- Tuple.cs
- LogExtentCollection.cs
- XamlSerializerUtil.cs
- StateChangeEvent.cs
- ListMarkerSourceInfo.cs
- webbrowsersite.cs
- SwitchElementsCollection.cs
- TextSimpleMarkerProperties.cs
- RuntimeVariablesExpression.cs
- KeyboardDevice.cs
- ListControlDesigner.cs
- InternalBufferOverflowException.cs
- ISO2022Encoding.cs
- HttpEncoder.cs
- TablePatternIdentifiers.cs
- EntityPropertyMappingAttribute.cs
- RtfToken.cs
- PerfCounterSection.cs
- EventToken.cs
- CodeDOMUtility.cs
- PropertyChangedEventArgs.cs
- JsonEnumDataContract.cs
- SqlVisitor.cs
- RTLAwareMessageBox.cs
- IgnoreFileBuildProvider.cs
- DispatcherOperation.cs
- DesignerGeometryHelper.cs
- Knowncolors.cs
- CatalogZone.cs
- IntAverageAggregationOperator.cs
- TableLayoutPanelCellPosition.cs
- DelayedRegex.cs
- CodeNamespaceImportCollection.cs
- ViewStateChangedEventArgs.cs
- TickBar.cs
- MethodExpression.cs
- RtType.cs
- AttachedAnnotation.cs
- SingleStorage.cs
- Matrix3D.cs
- SingleKeyFrameCollection.cs
- DynamicObjectAccessor.cs
- LoadWorkflowByKeyAsyncResult.cs
- GlyphRunDrawing.cs
- Pair.cs
- MetadataArtifactLoaderCompositeFile.cs
- XmlNodeList.cs
- Animatable.cs
- EditorOptionAttribute.cs
- StyleXamlTreeBuilder.cs
- ExpressionNode.cs
- BooleanFunctions.cs
- ValueUnavailableException.cs
- ExtenderProvidedPropertyAttribute.cs
- NotifyParentPropertyAttribute.cs
- NextPreviousPagerField.cs
- DrawingState.cs
- PrimitiveDataContract.cs
- StsCommunicationException.cs
- WindowsRichEdit.cs
- PaperSize.cs
- TemplateNameScope.cs
- DbConnectionPoolCounters.cs
- EditorPart.cs
- WebSysDescriptionAttribute.cs
- DbSetClause.cs
- RefreshInfo.cs
- StringToken.cs
- PanelDesigner.cs
- XPathNavigator.cs
- LinearGradientBrush.cs
- PaperSize.cs
- ValidationSummary.cs
- GraphicsContainer.cs
- RuntimeCompatibilityAttribute.cs
- XmlStringTable.cs
- CompatibleIComparer.cs
- XmlSchemaComplexContent.cs
- MimeTypeMapper.cs
- XmlAnyAttributeAttribute.cs
- ToolStripDropTargetManager.cs