<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Text Layout Framework: Flex Samples</title>
</head>

<body>
<h1>Text Layout Framework: Flex Samples</h1>
<p>The Text Layout Framework is an ActionScript library that provides text composition functionality. It is built on  the Flash text  engine available in Flash Player 10. This framework provides  support for high quality, typographically rich, flowable text layout  with selection, editing, undo, copy-paste, and an XML markup language  to dynamically style text. </p>
<p>The Text Layout Framework can be used by any developer who wants to build new text components for Flash Player. It uses pure  ActionScript; you can work with it in any Flash or Flex development environment. The library is implemented by the <font face="Courier New, Courier, monospace">flashx.textLayout.*</font> packages in <font face="Courier New, Courier, monospace">textLayout.swc</font>.</p>
<h2>Flex sample projects</h2>
<p>Note: These are examples of using TLF within Flex.  These are not examples of using the new TLF-based Gumbo components.</p>
<p>The <font face="Courier New, Courier, monospace">flex/SimpleEditor</font> folder of the Text Layout Framework SDK contains the <font face="Courier New, Courier, monospace">SimpleEditor</font> example Flex project. </p>
<p>This project demonstrates how to work with the Text Layout Framework in Flex Builder. It defines an editing component (<font face="Courier New, Courier, monospace">SimpleEditor</font>) that is built using the Text Flex component and the  text-layout SWC libraries.</p>
<p>The <font face="Courier New, Courier, monospace">flex/SimpleEditorWithCSS</font> folder of the Text Layout Framework SDK contains the <font face="Courier New, Courier, monospace">SimpleEditorWithCSS</font> example Flex project. </p>
<p>This project enhances SimpleEditor to include CSS styling support using the IFormatResolver.</p>
<p>The <font face="Courier New, Courier, monospace">flex/TextLayoutEditor</font>  folder of the Text Layout Framework SDK contains the <font face="Courier New, Courier, monospace">TextLayoutEditor</font> example Flex project.
<p>This project is a large demonstration editor for working with TextLayout Framework content.</p>
<h2>Building the example projects</h2>
<p>You can build the example projects with <a href="http://labs.adobe.com/technologies/flashbuilder4/">Flash Builder 4</a>. To load the project into your FlashBuilder development environment:</p>
<ol>
  <li>Open <a href="http://labs.adobe.com/technologies/flashbuilder4/">Flash Builder 4.</a></li>
  <li>Switch your workspace to the parent of the Samples folder.</li>
  <li>In the Preferences dialog Flex tab, select &quot;Installed Flex SDKs&quot;.</li>
  <li>Add a recent nightly build version of the <a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4">Flex Gumbo</a> version of the SDK, and make it the default SDK.  Note: Recent builds include the TLF 1.0 release candidate - after Flex 4 ships use that.</li>
  <li>Choose File &gt; Import.</li>
  <li> In the General tab, select &quot;Existing Projects into Workspace&quot;.</li>
  <li>Browse to  the root folder of the workspace. It is preselected.</li>
  <li>Deselect any examples you do not want to import. Do not select &quot;Copy into workspace&quot;.</li>
  <li>Click Finish. You can now build and run the examples from your development environment.</li>
</ol>
<hr />
</body>
</html>
