Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / Design / Adapters / DesignerTextViewAdapter.cs / 1305376 / DesignerTextViewAdapter.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using System.Globalization;
using System.Text;
using System.Web.Mobile;
using System.Web.UI.MobileControls;
using System.Web.UI.MobileControls.Adapters;
namespace System.Web.UI.Design.MobileControls.Adapters
{
[
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
]
[Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
internal class DesignerTextViewAdapter : System.Web.UI.MobileControls.Adapters.HtmlControlAdapter
{
protected new TextView Control
{
get
{
return (TextView)base.Control;
}
}
public override MobileCapabilities Device
{
get
{
return DesignerCapabilities.Instance;
}
}
public override void Render(HtmlMobileTextWriter writer)
{
Alignment alignment = (Alignment) Style[Style.AlignmentKey, true];
Wrapping wrapping = (Wrapping) Style[Style.WrappingKey, true];
bool wrap = (wrapping == Wrapping.Wrap || wrapping == Wrapping.NotSet);
String width = DesignerAdapterUtil.GetWidth(Control);
((DesignerTextWriter)writer).EnterZeroFontSizeTag();
writer.WriteBeginTag("div");
if (!wrap)
{
byte templateStatus;
int maxWidth = DesignerAdapterUtil.GetMaxWidthToFit(Control, out templateStatus);
if (templateStatus == DesignerAdapterUtil.CONTROL_IN_TEMPLATE_EDIT)
{
width = maxWidth.ToString(CultureInfo.InvariantCulture) + "px";
}
writer.WriteAttribute("style", "overflow-x:hidden;width:" + width);
}
else
{
writer.WriteAttribute("style", "word-wrap:break-word;width:" + width);
}
if (alignment != Alignment.NotSet)
{
writer.WriteAttribute("align", Enum.GetName(typeof(Alignment), alignment));
}
writer.Write(">");
MSHTMLHostUtil.ApplyStyle(null, null, null);
String filteredText = FilterTags(Control.Text.Trim());
int uniqueLineHeight = MSHTMLHostUtil.GetHtmlFragmentHeight("a");
int requiredHeight = MSHTMLHostUtil.GetHtmlFragmentHeight(filteredText);
int requiredWidth = MSHTMLHostUtil.GetHtmlFragmentWidth(filteredText);
((DesignerTextWriter)writer).WriteCssStyleText(Style, null, (requiredHeight > uniqueLineHeight || requiredWidth > 1) ? filteredText : " ", false);
writer.WriteEndTag("div");
((DesignerTextWriter)writer).ExitZeroFontSizeTag();
}
private enum CursorStatus
{
OutsideTag,
InsideTagName,
InsideAttributeName,
InsideAttributeValue,
ExpectingAttributeValue
}
private String FilterTags(String text)
{
StringBuilder filteredText = new StringBuilder();
// StringBuilder hrefValue = null;
int len = text.Length, i;
int tagBegin = 0; //, attribBegin = 0;
bool doubleQuotedAttributeValue = false;
// bool cacheHRefValue = false;
CursorStatus cs = CursorStatus.OutsideTag;
String tagName = String.Empty;
for (i = 0; i < len; i++)
{
switch (text[i])
{
case '<':
{
switch (cs)
{
case CursorStatus.OutsideTag:
{
cs = CursorStatus.InsideTagName;
tagBegin = i;
break;
}
}
break;
}
case '=':
{
switch (cs)
{
case CursorStatus.InsideAttributeName:
{
// cacheHRefValue = text.Substring(attribBegin, i-attribBegin).Trim().ToUpper() == "HREF";
// hrefValue = null;
cs = CursorStatus.ExpectingAttributeValue;
break;
}
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
}
break;
}
case '"':
{
switch (cs)
{
case CursorStatus.ExpectingAttributeValue:
{
cs = CursorStatus.InsideAttributeValue;
doubleQuotedAttributeValue = true;
//if (cacheHRefValue)
//{
// hrefValue = new StringBuilder("\"");
//}
break;
}
case CursorStatus.InsideAttributeValue:
{
//if (cacheHRefValue)
//{
// hrefValue.Append('"');
//}
if (text[i-1] != '\\' && doubleQuotedAttributeValue)
{
// leaving attribute value
cs = CursorStatus.InsideAttributeName;
// attribBegin = i;
break;
}
break;
}
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
}
break;
}
case '\'':
{
switch (cs)
{
case CursorStatus.ExpectingAttributeValue:
{
cs = CursorStatus.InsideAttributeValue;
//if (cacheHRefValue)
//{
// hrefValue = new StringBuilder("'");
//}
doubleQuotedAttributeValue = false;
break;
}
case CursorStatus.InsideAttributeValue:
{
//if (cacheHRefValue)
//{
// hrefValue.Append('\'');
//}
if (text[i-1] != '\\' && !doubleQuotedAttributeValue)
{
// leaving attribute value
cs = CursorStatus.InsideAttributeName;
// attribBegin = i;
break;
}
break;
}
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
}
break;
}
case '/':
{
switch (cs)
{
case CursorStatus.InsideTagName:
{
tagName = text.Substring(tagBegin+1, i-tagBegin-1).Trim().ToUpper(CultureInfo.InvariantCulture);
if (tagName.Trim().Length > 0)
{
cs = CursorStatus.InsideAttributeName;
// attribBegin = i;
}
break;
}
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
}
break;
}
case '>':
{
switch (cs)
{
case CursorStatus.InsideTagName:
case CursorStatus.InsideAttributeName:
case CursorStatus.ExpectingAttributeValue:
{
// leaving tag
if (cs == CursorStatus.InsideTagName)
{
tagName = text.Substring(tagBegin+1, i-tagBegin-1).Trim().ToUpper(CultureInfo.InvariantCulture);
}
cs = CursorStatus.OutsideTag;
switch (tagName)
{
case "A":
{
//filteredText.Append(String.Format("",
// hrefValue == null ? String.Empty : hrefValue.ToString()));
filteredText.Append("");
break;
}
case "/A":
case "B":
case "/B":
case "BR":
case "/BR":
case "I":
case "/I":
case "P":
case "/P":
{
filteredText.Append("<" + tagName + ">");
break;
}
}
tagName = String.Empty;
break;
}
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
}
break;
}
default:
{
if (Char.IsWhiteSpace(text[i]))
{
switch (cs)
{
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
case CursorStatus.InsideTagName:
{
cs = CursorStatus.InsideAttributeName;
// attribBegin = i;
tagName = text.Substring(tagBegin+1, i-tagBegin-1).Trim().ToUpper(CultureInfo.InvariantCulture);
break;
}
}
}
else
{
switch (cs)
{
case CursorStatus.OutsideTag:
{
filteredText.Append(text[i]);
break;
}
}
}
break;
}
}
}
return filteredText.ToString();
}
}
}
// 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
- RecognitionResult.cs
- MsmqBindingElementBase.cs
- AsmxEndpointPickerExtension.cs
- RightsManagementEncryptionTransform.cs
- OracleSqlParser.cs
- FormViewInsertEventArgs.cs
- RoleServiceManager.cs
- QueryConverter.cs
- CssTextWriter.cs
- CapabilitiesAssignment.cs
- ConfigurationPropertyAttribute.cs
- _LazyAsyncResult.cs
- Emitter.cs
- TabControlToolboxItem.cs
- CodeArrayCreateExpression.cs
- TemplatedWizardStep.cs
- SqlVisitor.cs
- IdentityManager.cs
- QilUnary.cs
- SupportingTokenSecurityTokenResolver.cs
- ContextInformation.cs
- BinaryUtilClasses.cs
- HtmlLink.cs
- HttpWebRequestElement.cs
- xdrvalidator.cs
- ContentAlignmentEditor.cs
- SourceElementsCollection.cs
- DependencyObjectProvider.cs
- SuppressMessageAttribute.cs
- NegotiateStream.cs
- MdiWindowListItemConverter.cs
- SqlTransaction.cs
- WebBrowserContainer.cs
- SchemaCollectionPreprocessor.cs
- HttpEncoderUtility.cs
- Exceptions.cs
- ClientRoleProvider.cs
- SignedXml.cs
- CustomWebEventKey.cs
- RecommendedAsConfigurableAttribute.cs
- MobileCapabilities.cs
- SoapAttributeOverrides.cs
- OdbcCommand.cs
- GregorianCalendar.cs
- HttpCookieCollection.cs
- PopupRootAutomationPeer.cs
- ListView.cs
- ToolStripSplitStackLayout.cs
- MetadataItemEmitter.cs
- NonBatchDirectoryCompiler.cs
- PassportPrincipal.cs
- SqlCharStream.cs
- DynamicVirtualDiscoSearcher.cs
- ThreadSafeList.cs
- UserControl.cs
- MD5.cs
- SqlCacheDependencyDatabaseCollection.cs
- SelectedGridItemChangedEvent.cs
- FlowDocumentView.cs
- Comparer.cs
- LocalizationParserHooks.cs
- PrimitiveRenderer.cs
- DbProviderConfigurationHandler.cs
- X509Utils.cs
- ILGenerator.cs
- InputEventArgs.cs
- HtmlTextArea.cs
- TCPListener.cs
- EventLogWatcher.cs
- Point.cs
- HandleCollector.cs
- EncoderNLS.cs
- GlobalItem.cs
- RepeatBehaviorConverter.cs
- DetailsViewDeletedEventArgs.cs
- ObjectQueryState.cs
- PointHitTestParameters.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ExpressionWriter.cs
- InputLanguage.cs
- ErasingStroke.cs
- StorageSetMapping.cs
- XmlSchemaAnnotated.cs
- CurrencyManager.cs
- ScaleTransform.cs
- ImmutableDispatchRuntime.cs
- DataGridViewLinkColumn.cs
- SingleConverter.cs
- TabControlCancelEvent.cs
- DbConnectionOptions.cs
- QueryLifecycle.cs
- ResourceCategoryAttribute.cs
- FixedTextBuilder.cs
- DependencyObjectType.cs
- ConstructorBuilder.cs
- NetSectionGroup.cs
- UInt32.cs
- XmlDocumentSerializer.cs
- DateTimeUtil.cs
- UrlMappingsSection.cs