xTalk Style Stack

All flavors welcome.
Forum rules
Be kind.
xAction
Posts: 285
Joined: Thu Sep 16, 2021 1:40 pm
Contact:

xTalk Style Stack

Post by xAction »

xTalkStyle_Stack.oxtStack
(17.46 KiB) Downloaded 10 times
OpenXTalk_andor_Livecode_UI_Style.png
OpenXTalk_andor_Livecode_UI_Style.png (203.14 KiB) Viewed 455 times
I think there needs to be a stack and/or screenshots like this to guide new eyes.
Definately have a mind for it to go on a web page in an interactive way.
Maybe with some catchy music like old iMac commercials.

I think we should iterate on things like this to say "That's awful!" and "hmm...maybe"
Without having to write a whole book that nobody will read.

Anyway I just wanted to put this up to get the seed planted.
I've got a whole bunch stacks to pack up ...without all the bugs I'm finding like if you resize Defensive to a smaller size the center of the screen is 100% wrong, doh!.

Oh as soon as you have a screenshot of an xTalk_style stack like my screenshot, replace mine in this thread!
We could make a GIF couldn't we....?
User avatar
OpenXTalkPaul
Posts: 1574
Joined: Sat Sep 11, 2021 4:19 pm
Contact:

Re: xTalk Style Stack

Post by OpenXTalkPaul »

I like this idea. We definitely should be making it very clear to new users that it's a deferent kind of thing than less interactive development environments, a more 'live' scripting experience then they may have seen before. xTalk was/is the original R.A.D. (Rapid Application Development) system.

You know there is an interactive tutorial system built in to the IDE, and a 'Hello World" demo and a couple of short walk-thru demos of building a couple of stacks that use DataGrid, Database, and such. This tutorial system has its own simple syntax for creating them. There's should be a tutorial syntax guide in 'all guides'. These guided demos are pretty dated now. I think it would be good to expand on that, add a guided tour that shows more of the IDE, demos that use newer features like Widgets and SVG and such.

If you use static images then we can't change to look any of the IDE palettes unless you udate all the screenshots too.
For now, my Tools Palette Looks like:
MyTools.jpg
MyTools.jpg (63.21 KiB) Viewed 411 times


What's that RayLibUI importer thing? That sounds interesting.

I'd like to have some sort of UI text markup specification file <> UI layout for of system, for reusable stack/card layouts. Basically I'd like to have Graphical UI-only equivalent of a 'script-only' stack, but in a GitHub/version control friendly format instead of the binary Stack format.
xAction
Posts: 285
Joined: Thu Sep 16, 2021 1:40 pm
Contact:

Re: xTalk Style Stack

Post by xAction »

I was trying to parse RayLib GUI Layout output , but I ran into bugs in the format and figured I'd wait until he gets around to fixing his format before going further. Bug: objects with space in name break the whole Layout parser.

I've been dreaming of a universal UI parsing/converting system for years. I just don't work with a lot of UI systems to know them well enough to make it, it's always a whole new language insid a whole new language, and when i get in deep with something like LÖVE or IMGui I find a lot of abandoned projects and realize I'm making another one. Still being able to turn a QuarkXpress, Indesign, or Illustrator file into a stack or a stack into a webpage or python app would be absolutely the best.

I'm not a big ugly database kind of person, but a big ugly database is exactly what's needed to cross reference the many worlds of UI.

I tried once a long time ago to export every property and script of every GUI element into files and folders, but it got so deep the operating system couldn't work with the structure once the main folder was dumped into a subfolder or two. Writing everything as a script gets bloated real fast, however it should be 'portable' and github's storage is infinite, if their data centers are going to accelerate climate change we may as well get some use of them before the water line reaches our keyboards.

Here's a stack I made to convert a stack and it's controls to LÖVE Nuklear gui format, it's so ugly but I needed to explore all the options to see what might work in LÖVE . Worked on it for hours and hours, contacted the Nuklear developer...no response. Oh good, he's still alive and working on it. I should kick him another e-mail sometime. The LÖVE stuff is in the button on the top right
ControlsHarvestv6.oxtStack
(558.51 KiB) Downloaded 7 times
How did that work? Exported everything from a stack, imported the "card" folder to get nuked. That translated xTalk properties to LÖVE Nuke Lua script or it was supposed to. Think I made my 3D stack after giving up on that.
User avatar
OpenXTalkPaul
Posts: 1574
Joined: Sat Sep 11, 2021 4:19 pm
Contact:

Re: xTalk Style Stack

Post by OpenXTalkPaul »

xAction wrote: Sat Mar 16, 2024 10:11 pm QuarkXpress, Indesign, or Illustrator file into a stack or a stack into a webpage or python app would be absolutely the best.
InDesign has XML based IDML format, but I think that's been updated and changed over the years.

I've started and stopped several efforts to do something like that for xTalk + XML over the years, I can never seem to figure out what format would be the most portable between xTalk and the most GUI Toolkits as possible, but like you were getting at; there's just too many deferent UI kits all with different approaches, and the road is littered with abandon projects.

Qt QML https://en.wikipedia.org/wiki/QML

GtkBuilder XML https://www.jwestman.net/2021/10/22/a-m ... r-gtk.html

And so many more.
xAction
Posts: 285
Joined: Thu Sep 16, 2021 1:40 pm
Contact:

Re: xTalk Style Stack

Post by xAction »

Damn those are ugly. But I guess you're not meant to look at any of it, its for machine eyes only.

I envision a Rossetta Code for UI, where the computer knows all the equivalent objects and properties and can spit out the appropriate file format. Maybe in another year AI won't be so clunky that you have to correct 80% of what it outputs.

Strange all the IDML files I found online are binary, I could swear I opened one up to a face full of XML syntax once. Maybe that was ...that open source app I always forget the name of...Scribus. Yep
OMG, that's ONE Page with One Graphic rectangle in it!
What a mess!

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<SCRIBUSUTF8NEW Version="1.4.8">
    <DOCUMENT ANZPAGES="1" PAGEWIDTH="595.28" PAGEHEIGHT="841.89" BORDERLEFT="40" BORDERRIGHT="40" BORDERTOP="40" BORDERBOTTOM="40" PRESET="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" ORIENTATION="0" PAGESIZE="A4" FIRSTNUM="1" BOOK="0" AUTOSPALTEN="1" ABSTSPALTEN="11" UNITS="0" DFONT="Arial Regular" DSIZE="12" DCOL="1" DGAP="0" TabFill="" TabWidth="36" AUTHOR="" COMMENTS="" KEYWORDS="" PUBLISHER="" DOCDATE="" DOCTYPE="" DOCFORMAT="" DOCIDENT="" DOCSOURCE="" DOCLANGINFO="" DOCRELATION="" DOCCOVER="" DOCRIGHTS="" DOCCONTRIB="" TITLE="" SUBJECT="" VHOCH="33" VHOCHSC="66" VTIEF="33" VTIEFSC="66" VKAPIT="75" BASEGRID="14.4" BASEO="0" AUTOL="20" UnderlinePos="-1" UnderlineWidth="-1" StrikeThruPos="-1" StrikeThruWidth="-1" GROUPC="1" HCMS="0" DPSo="0" DPSFo="0" DPuse="0" DPgam="0" DPbla="1" DPMo="sRGB display profile (ICC v2.2)" DPPr="Fogra27L CMYK Coated Press" DPIn="sRGB display profile (ICC v2.2)" DPInCMYK="Fogra27L CMYK Coated Press" DPIn2="sRGB display profile (ICC v2.2)" DPIn3="Fogra27L CMYK Coated Press" DISc="1" DIIm="0" ALAYER="0" LANGUAGE="English" MINWORDLEN="3" HYCOUNT="2" AUTOMATIC="1" AUTOCHECK="0" GUIDELOCK="0" SnapToGuides="0" SnapToGrid="0" MINGRID="20" MAJGRID="100" SHOWGRID="0" SHOWGUIDES="1" showcolborders="1" SHOWFRAME="1" SHOWLAYERM="0" SHOWMARGIN="1" SHOWBASE="0" SHOWPICT="1" SHOWControl="0" SHOWLINK="0" rulerMode="1" showrulers="1" showBleed="1" rulerXoffset="0" rulerYoffset="0" GuideRad="10" GRAB="4" POLYC="4" POLYF="0.707" POLYR="0" POLYCUR="0" POLYFD="0" POLYS="0" AutoSave="1" AutoSaveTime="600000" ScratchBottom="20" ScratchLeft="100" ScratchRight="100" ScratchTop="20" GapHorizontal="0" GapVertical="40" StartArrow="0" EndArrow="0" PEN="Black" BRUSH="None" PENLINE="Black" PENTEXT="Black" StrokeText="Black" TextBackGround="None" TextLineColor="None" TextBackGroundShade="100" TextLineShade="100" TextPenShade="100" TextStrokeShade="100" STIL="1" STILLINE="1" WIDTH="1" WIDTHLINE="1" PENSHADE="100" LINESHADE="100" BRUSHSHADE="100" MAGMIN="10" MAGMAX="3200" MAGSTEP="200" CPICT="None" PICTSHADE="100" PICTSCX="1" PICTSCY="1" PSCALE="1" PASPECT="1" EmbeddedPath="0" HalfRes="1" dispX="10" dispY="10" constrain="15" MINORC="#00ff00" MAJORC="#00ff00" GuideC="#000080" BaseC="#c0c0c0" GuideZ="10" BACKG="1" PAGEC="#ffffff" MARGC="#0000ff" RANDF="0" currentProfile="PostScript">
        <CheckProfile Name="PDF 1.3" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkOffConflictLayers="0"/>
        <CheckProfile Name="PDF 1.4" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkResolution="1" checkTransparency="0" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkOffConflictLayers="0"/>
        <CheckProfile Name="PDF 1.5" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkResolution="1" checkTransparency="0" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkOffConflictLayers="0"/>
        <CheckProfile Name="PDF/X-1a" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="1" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkOffConflictLayers="0"/>
        <CheckProfile Name="PDF/X-3" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="1" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkOffConflictLayers="0"/>
        <CheckProfile Name="PostScript" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkOffConflictLayers="0"/>
        <COLOR NAME="Black" CMYK="#000000ff" Spot="0" Register="0"/>
        <COLOR NAME="Blue" RGB="#0000ff" Spot="0" Register="0"/>
        <COLOR NAME="Cool Black" CMYK="#990000ff" Spot="0" Register="0"/>
        <COLOR NAME="Cyan" CMYK="#ff000000" Spot="0" Register="0"/>
        <COLOR NAME="Green" RGB="#00ff00" Spot="0" Register="0"/>
        <COLOR NAME="Magenta" CMYK="#00ff0000" Spot="0" Register="0"/>
        <COLOR NAME="Red" RGB="#ff0000" Spot="0" Register="0"/>
        <COLOR NAME="Registration" CMYK="#ffffffff" Spot="0" Register="1"/>
        <COLOR NAME="Rich Black" CMYK="#996666ff" Spot="0" Register="0"/>
        <COLOR NAME="Warm Black" CMYK="#00994cff" Spot="0" Register="0"/>
        <COLOR NAME="White" CMYK="#00000000" Spot="0" Register="0"/>
        <COLOR NAME="Yellow" CMYK="#0000ff00" Spot="0" Register="0"/>
        <HYPHEN/>
        <STYLE NAME="Default Paragraph Style" DefaultStyle="1" ALIGN="0" LINESPMode="0" LINESP="15" INDENT="0" RMARGIN="0" FIRST="0" VOR="0" NACH="0" DROP="0" DROPLIN="2" DROPDIST="0"/>
        <CHARSTYLE CNAME="Default Character Style" DefaultStyle="1" FONT="Arial Regular" FONTSIZE="12" FEATURES="inherit" FCOLOR="Black" FSHADE="100" SCOLOR="Black" SSHADE="100" TXTSHX="5" TXTSHY="-5" TXTOUT="1" TXTULP="-0.1" TXTULW="-0.1" TXTSTP="-0.1" TXTSTW="-0.1" SCALEH="100" SCALEV="100" BASEO="0" KERN="0" LANGUAGE="English"/>
        <LAYERS NUMMER="0" LEVEL="0" NAME="Background" SICHTBAR="1" DRUCKEN="1" EDIT="1" FLOW="1" TRANS="1" BLEND="0" OUTL="0" LAYERC="#000000"/>
        <Printer firstUse="1" toFile="255" useAltPrintCommand="255" outputSeparations="255" useSpotColors="255" useColor="255" mirrorH="255" mirrorV="255" useICC="0" doGCR="255" doClip="255" setDevParam="255" useDocBleeds="255" cropMarks="255" bleedMarks="255" registrationMarks="255" colorMarks="255" includePDFMarks="255" PSLevel="-1" PDLanguage="-1" markOffset="nan" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" printer="" filename="" separationName="" printerCommand=""/>
        <PDF firstUse="1" Thumbnails="0" Articles="0" Bookmarks="0" Compress="1" CMethod="0" Quality="0" EmbedPDF="0" MirrorH="0" MirrorV="0" Clip="0" RotateDeg="0" PresentMode="0" RecalcPic="0" Grayscale="0" RGBMode="1" UseProfiles="0" UseProfiles2="0" Binding="0" PicRes="300" Resolution="300" Version="14" Intent="1" Intent2="0" SolidP="sRGB display profile (ICC v2.2)" ImageP="sRGB display profile (ICC v2.2)" PrintP="Fogra27L CMYK Coated Press" InfoString="" BTop="0" BLeft="0" BRight="0" BBottom="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" docInfoMarks="0" markOffset="0" ImagePr="0" PassOwner="" PassUser="" Permissions="-4" Encrypt="0" UseLayers="0" UseLpi="0" UseSpotColors="1" doMultiFile="0" displayBookmarks="0" displayFullscreen="0" displayLayers="0" displayThumbs="0" hideMenuBar="0" hideToolBar="0" fitWindow="0" PageLayout="0" openAction="">
            <LPI Color="Black" Frequency="133" Angle="45" SpotFunction="3"/>
            <LPI Color="Cyan" Frequency="133" Angle="105" SpotFunction="3"/>
            <LPI Color="Magenta" Frequency="133" Angle="75" SpotFunction="3"/>
            <LPI Color="Yellow" Frequency="133" Angle="90" SpotFunction="3"/>
        </PDF>
        <DocItemAttributes/>
        <TablesOfContents/>
        <PageSets>
            <Set Name="Single Page" FirstPage="0" Rows="1" Columns="1"/>
            <Set Name="Double Sided" FirstPage="1" Rows="1" Columns="2">
                <PageNames Name="Left Page"/>
                <PageNames Name="Right Page"/>
            </Set>
            <Set Name="3-Fold" FirstPage="0" Rows="1" Columns="3">
                <PageNames Name="Left Page"/>
                <PageNames Name="Middle"/>
                <PageNames Name="Right Page"/>
            </Set>
            <Set Name="4-Fold" FirstPage="0" Rows="1" Columns="4">
                <PageNames Name="Left Page"/>
                <PageNames Name="Middle Left"/>
                <PageNames Name="Middle Right"/>
                <PageNames Name="Right Page"/>
            </Set>
        </PageSets>
        <Sections>
            <Section Number="0" Name="0" From="0" To="0" Type="Type_1_2_3" Start="1" Reversed="0" Active="1"/>
        </Sections>
        <MASTERPAGE PAGEXPOS="100" PAGEYPOS="20" PAGEWIDTH="595.28" PAGEHEIGHT="841.89" BORDERLEFT="40" BORDERRIGHT="40" BORDERTOP="40" BORDERBOTTOM="40" NUM="0" NAM="Normal" MNAM="" Size="A4" Orientation="0" LEFT="0" PRESET="0" VerticalGuides="" HorizontalGuides="" AGhorizontalAutoGap="0" AGverticalAutoGap="0" AGhorizontalAutoCount="0" AGverticalAutoCount="0" AGhorizontalAutoRefer="0" AGverticalAutoRefer="0" AGSelection="0 0 0 0"/>
        <PAGE PAGEXPOS="100" PAGEYPOS="20" PAGEWIDTH="595.28" PAGEHEIGHT="841.89" BORDERLEFT="40" BORDERRIGHT="40" BORDERTOP="40" BORDERBOTTOM="40" NUM="0" NAM="" MNAM="Normal" Size="A4" Orientation="0" LEFT="0" PRESET="0" VerticalGuides="" HorizontalGuides="" AGhorizontalAutoGap="0" AGverticalAutoGap="0" AGhorizontalAutoCount="0" AGverticalAutoCount="0" AGhorizontalAutoRefer="0" AGverticalAutoRefer="0" AGSelection="0 0 0 0"/>
        <PAGEOBJECT OwnPage="0" PTYPE="6" XPOS="184.5" YPOS="81.75" WIDTH="147" HEIGHT="182.25" RADRECT="0" FRTYPE="0" CLIPEDIT="1" PWIDTH="1" PCOLOR="None" PCOLOR2="Black" COLUMNS="1" COLGAP="0" NAMEDLST="" SHADE="100" SHADE2="100" GRTYP="0" ROT="0" PLINEART="1" PLINEEND="0" PLINEJOIN="0" LOCALSCX="1" LOCALSCY="1" LOCALX="0" LOCALY="0" PICART="1" PLTSHOW="0" BASEOF="0" textPathType="0" textPathFlipped="0" FLIPPEDH="0" FLIPPEDV="0" SCALETYPE="1" RATIO="1" PRINTABLE="1" ANNOTATION="0" ANNAME="" TEXTFLOWMODE="0" TEXTFLOW="0" TEXTFLOW2="0" TEXTFLOW3="0" AUTOTEXT="0" EXTRA="0" TEXTRA="0" BEXTRA="0" REXTRA="0" FLOP="0" PFILE="" PFILE2="" PFILE3="" PRFILE="" EPROF="" IRENDER="1" EMBEDDED="1" LOCK="0" LOCKR="0" REVERS="0" TransValue="0" TransValueS="0" TransBlend="0" TransBlendS="0" isTableItem="0" TopLine="0" LeftLine="0" RightLine="0" BottomLine="0" isGroupControl="0" NUMDASH="0" DASHS="" DASHOFF="0" NUMPO="16" POCOOR="0 0 0 0 147 0 147 0 147 0 147 0 147 182.25 147 182.25 147 182.25 147 182.25 0 182.25 0 182.25 0 182.25 0 182.25 0 0 0 0 " NUMCO="16" COCOOR="0 0 0 0 147 0 147 0 147 0 147 0 147 182.25 147 182.25 147 182.25 147 182.25 0 182.25 0 182.25 0 182.25 0 182.25 0 0 0 0 " NUMGROUP="0" GROUPS="" startArrowIndex="0" endArrowIndex="0" OnMasterPage="" ImageClip="" ImageRes="1" Pagenumber="0" isInline="0" fillRule="1" doOverprint="0" gXpos="0" gYpos="0" gWidth="0" gHeight="0" LAYER="0" BOOKMARK="0" NEXTITEM="-1" BACKITEM="-1">
            <trail/>
            <PageItemAttributes/>
        </PAGEOBJECT>
    </DOCUMENT>
</SCRIBUSUTF8NEW>
User avatar
OpenXTalkPaul
Posts: 1574
Joined: Sat Sep 11, 2021 4:19 pm
Contact:

Re: xTalk Style Stack

Post by OpenXTalkPaul »

Damn those are ugly. But I guess you're not meant to look at any of it, its for machine eyes only.

I envision a Rossetta Code for UI, where the computer knows all the equivalent objects and properties and can spit out the appropriate file format. Maybe in another year AI won't be so clunky that you have to correct 80% of what it outputs.

Strange all the IDML files I found online are binary, I could swear I opened one up to a face full of XML syntax once. Maybe that was ...that open source app I always forget the name of...Scribus. Yep
OMG, that's ONE Page with One Graphic rectangle in it!
What a mess!
Ah, yeah, I forgot IDML does seem to be some sort of binary encoded version. I haven't used it in a long time as I work in a different area of printing now. I used to use it to export InDesign files to open in an older version of InDesign (for clients using 'out-dated' software )
Here's 'the IDMS ('snippet') version that is the plain text human readable XML version.

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?aid style="50" type="snippet" readerVersion="6.0" featureSet="257" product="15.0(155)" ?>
<?aid SnippetType="PageItem"?>
<Document DOMVersion="15.0" Self="d">
	<Color Self="Color/Black" Model="Process" Space="CMYK" ColorValue="0 0 0 100" ColorOverride="Specialblack" AlternateSpace="NoAlternateColor" AlternateColorValue="" Name="Black" ColorEditable="false" ColorRemovable="false" Visible="true" SwatchCreatorID="7937" SwatchColorGroupReference="u18ColorGroupSwatch3" />
	<Swatch Self="Swatch/None" Name="None" ColorEditable="false" ColorRemovable="false" Visible="true" SwatchCreatorID="7937" SwatchColorGroupReference="u18ColorGroupSwatch0" />
	<StrokeStyle Self="StrokeStyle/$ID/Solid" Name="$ID/Solid" />
	<RootCharacterStyleGroup Self="u7f">
		<CharacterStyle Self="CharacterStyle/$ID/[No character style]" Imported="false" SplitDocument="false" EmitCss="true" StyleUniqueId="$ID/" IncludeClass="true" ExtendedKeyboardShortcut="0 0 0" Name="$ID/[No character style]" />
	</RootCharacterStyleGroup>
	<NumberingList Self="NumberingList/$ID/[Default]" Name="$ID/[Default]" ContinueNumbersAcrossStories="false" ContinueNumbersAcrossDocuments="false" />
	<RootParagraphStyleGroup Self="u7e">
		<ParagraphStyle Self="ParagraphStyle/$ID/[No paragraph style]" Name="$ID/[No paragraph style]" Imported="false" SplitDocument="false" EmitCss="true" StyleUniqueId="$ID/" IncludeClass="true" ExtendedKeyboardShortcut="0 0 0" EmptyNestedStyles="true" EmptyLineStyles="true" EmptyGrepStyles="true" FillColor="Color/Black" FontStyle="Regular" PointSize="12" HorizontalScale="100" KerningMethod="$ID/Metrics" Ligatures="true" PageNumberType="AutoPageNumber" StrokeWeight="1" Tracking="0" Composer="HL Composer" DropCapCharacters="0" DropCapLines="0" BaselineShift="0" Capitalization="Normal" StrokeColor="Swatch/None" HyphenateLadderLimit="3" VerticalScale="100" LeftIndent="0" RightIndent="0" FirstLineIndent="0" AutoLeading="120" AppliedLanguage="$ID/English: USA" Hyphenation="true" HyphenateAfterFirst="2" HyphenateBeforeLast="2" HyphenateCapitalizedWords="true" HyphenateWordsLongerThan="5" NoBreak="false" HyphenationZone="36" SpaceBefore="0" SpaceAfter="0" Underline="false" OTFFigureStyle="Default" DesiredWordSpacing="100" MaximumWordSpacing="133" MinimumWordSpacing="80" DesiredLetterSpacing="0" MaximumLetterSpacing="0" MinimumLetterSpacing="0" DesiredGlyphScaling="100" MaximumGlyphScaling="100" MinimumGlyphScaling="100" StartParagraph="Anywhere" KeepAllLinesTogether="false" KeepWithNext="0" KeepFirstLines="2" KeepLastLines="2" Position="Normal" StrikeThru="false" CharacterAlignment="AlignEmCenter" KeepLinesTogether="false" StrokeTint="-1" FillTint="-1" OverprintStroke="false" OverprintFill="false" GradientStrokeAngle="0" GradientFillAngle="0" GradientStrokeLength="-1" GradientFillLength="-1" GradientStrokeStart="0 0" GradientFillStart="0 0" Skew="0" RuleAboveLineWeight="1" RuleAboveTint="-1" RuleAboveOffset="0" RuleAboveLeftIndent="0" RuleAboveRightIndent="0" RuleAboveWidth="ColumnWidth" RuleBelowLineWeight="1" RuleBelowTint="-1" RuleBelowOffset="0" RuleBelowLeftIndent="0" RuleBelowRightIndent="0" RuleBelowWidth="ColumnWidth" RuleAboveOverprint="false" RuleBelowOverprint="false" RuleAbove="false" RuleBelow="false" LastLineIndent="0" HyphenateLastWord="true" ParagraphBreakType="Anywhere" SingleWordJustification="FullyJustified" OTFOrdinal="false" OTFFraction="false" OTFDiscretionaryLigature="false" OTFTitling="false" RuleAboveGapTint="-1" RuleAboveGapOverprint="false" RuleBelowGapTint="-1" RuleBelowGapOverprint="false" Justification="LeftAlign" DropcapDetail="1" PositionalForm="None" OTFMark="true" HyphenWeight="5" OTFLocale="true" HyphenateAcrossColumns="true" KeepRuleAboveInFrame="false" IgnoreEdgeAlignment="false" OTFSlashedZero="false" OTFStylisticSets="0" OTFHistorical="false" OTFContextualAlternate="true" UnderlineGapOverprint="false" UnderlineGapTint="-1" UnderlineOffset="-9999" UnderlineOverprint="false" UnderlineTint="-1" UnderlineWeight="-9999" StrikeThroughGapOverprint="false" StrikeThroughGapTint="-1" StrikeThroughOffset="-9999" StrikeThroughOverprint="false" StrikeThroughTint="-1" StrikeThroughWeight="-9999" MiterLimit="4" StrokeAlignment="OutsideAlignment" EndJoin="MiterEndJoin" SpanColumnType="SingleColumn" SplitColumnInsideGutter="6" SplitColumnOutsideGutter="0" KeepWithPrevious="false" SpanColumnMinSpaceBefore="0" SpanColumnMinSpaceAfter="0" OTFSwash="false" ParagraphShadingTint="20" ParagraphShadingOverprint="false" ParagraphShadingWidth="ColumnWidth" ParagraphShadingOn="false" ParagraphShadingClipToFrame="false" ParagraphShadingSuppressPrinting="false" ParagraphShadingLeftOffset="0" ParagraphShadingRightOffset="0" ParagraphShadingTopOffset="0" ParagraphShadingBottomOffset="0" ParagraphShadingTopOrigin="AscentTopOrigin" ParagraphShadingBottomOrigin="DescentBottomOrigin" ParagraphBorderTint="-1" ParagraphBorderOverprint="false" ParagraphBorderOn="false" ParagraphBorderGapTint="-1" ParagraphBorderGapOverprint="false" Tsume="0" LeadingAki="-1" TrailingAki="-1" KinsokuType="KinsokuPushInFirst" KinsokuHangType="None" BunriKinshi="true" RubyOpenTypePro="true" RubyFontSize="-1" RubyAlignment="RubyJIS" RubyType="PerCharacterRuby" RubyParentSpacing="RubyParent121Aki" RubyXScale="100" RubyYScale="100" RubyXOffset="0" RubyYOffset="0" RubyPosition="AboveRight" RubyAutoAlign="true" RubyParentOverhangAmount="RubyOverhangOneRuby" RubyOverhang="false" RubyAutoScaling="false" RubyParentScalingPercent="66" RubyTint="-1" RubyOverprintFill="Auto" RubyStrokeTint="-1" RubyOverprintStroke="Auto" RubyWeight="-1" KentenKind="None" KentenFontSize="-1" KentenXScale="100" KentenYScale="100" KentenPlacement="0" KentenAlignment="AlignKentenCenter" KentenPosition="AboveRight" KentenCustomCharacter="" KentenCharacterSet="CharacterInput" KentenTint="-1" KentenOverprintFill="Auto" KentenStrokeTint="-1" KentenOverprintStroke="Auto" KentenWeight="-1" Tatechuyoko="false" TatechuyokoXOffset="0" TatechuyokoYOffset="0" AutoTcy="0" AutoTcyIncludeRoman="false" Jidori="0" GridGyoudori="0" GridAlignFirstLineOnly="false" GridAlignment="None" CharacterRotation="0" RotateSingleByteCharacters="false" Rensuuji="true" ShataiMagnification="0" ShataiDegreeAngle="4500" ShataiAdjustTsume="true" ShataiAdjustRotation="false" Warichu="false" WarichuLines="2" WarichuSize="50" WarichuLineSpacing="0" WarichuAlignment="Auto" WarichuCharsBeforeBreak="2" WarichuCharsAfterBreak="2" OTFHVKana="false" OTFProportionalMetrics="false" OTFRomanItalics="false" LeadingModel="LeadingModelAkiBelow" ScaleAffectsLineHeight="false" ParagraphGyoudori="false" CjkGridTracking="false" GlyphForm="None" RubyAutoTcyDigits="0" RubyAutoTcyIncludeRoman="false" RubyAutoTcyAutoScale="true" TreatIdeographicSpaceAsSpace="true" AllowArbitraryHyphenation="false" BulletsAndNumberingListType="NoList" NumberingStartAt="1" NumberingLevel="1" NumberingContinue="true" NumberingApplyRestartPolicy="true" BulletsAlignment="LeftAlign" NumberingAlignment="LeftAlign" NumberingExpression="^#.^t" BulletsTextAfter="^t" ParagraphBorderLeftOffset="0" ParagraphBorderRightOffset="0" ParagraphBorderTopOffset="0" ParagraphBorderBottomOffset="0" ParagraphBorderStrokeEndJoin="MiterEndJoin" ParagraphBorderTopLeftCornerOption="None" ParagraphBorderTopRightCornerOption="None" ParagraphBorderBottomLeftCornerOption="None" ParagraphBorderBottomRightCornerOption="None" ParagraphBorderTopLeftCornerRadius="12" ParagraphBorderTopRightCornerRadius="12" ParagraphBorderBottomLeftCornerRadius="12" ParagraphBorderBottomRightCornerRadius="12" ParagraphShadingTopLeftCornerOption="None" ParagraphShadingTopRightCornerOption="None" ParagraphShadingBottomLeftCornerOption="None" ParagraphShadingBottomRightCornerOption="None" ParagraphShadingTopLeftCornerRadius="12" ParagraphShadingTopRightCornerRadius="12" ParagraphShadingBottomLeftCornerRadius="12" ParagraphShadingBottomRightCornerRadius="12" ParagraphBorderStrokeEndCap="ButtEndCap" ParagraphBorderWidth="ColumnWidth" ParagraphBorderTopOrigin="AscentTopOrigin" ParagraphBorderBottomOrigin="DescentBottomOrigin" ParagraphBorderTopLineWeight="1" ParagraphBorderBottomLineWeight="1" ParagraphBorderLeftLineWeight="1" ParagraphBorderRightLineWeight="1" ParagraphBorderDisplayIfSplits="false" MergeConsecutiveParaBorders="true" ProviderHyphenationStyle="HyphAll" DigitsType="DefaultDigits" Kashidas="DefaultKashidas" DiacriticPosition="OpentypePositionFromBaseline" CharacterDirection="DefaultDirection" ParagraphDirection="LeftToRightDirection" ParagraphJustification="DefaultJustification" ParagraphKashidaWidth="2" XOffsetDiacritic="0" YOffsetDiacritic="0" OTFOverlapSwash="false" OTFStylisticAlternate="false" OTFJustificationAlternate="false" OTFStretchedAlternate="false" KeyboardDirection="DefaultDirection">
			<Properties>
				<Leading type="enumeration">Auto</Leading>
				<TabList type="list">
				</TabList>
				<AppliedFont type="string">Minion Pro</AppliedFont>
				<RuleAboveColor type="string">Text Color</RuleAboveColor>
				<RuleBelowColor type="string">Text Color</RuleBelowColor>
				<RuleAboveType type="object">StrokeStyle/$ID/Solid</RuleAboveType>
				<RuleBelowType type="object">StrokeStyle/$ID/Solid</RuleBelowType>
				<BalanceRaggedLines type="enumeration">NoBalancing</BalanceRaggedLines>
				<RuleAboveGapColor type="object">Swatch/None</RuleAboveGapColor>
				<RuleBelowGapColor type="object">Swatch/None</RuleBelowGapColor>
				<UnderlineColor type="string">Text Color</UnderlineColor>
				<UnderlineGapColor type="object">Swatch/None</UnderlineGapColor>
				<UnderlineType type="object">StrokeStyle/$ID/Solid</UnderlineType>
				<StrikeThroughColor type="string">Text Color</StrikeThroughColor>
				<StrikeThroughGapColor type="object">Swatch/None</StrikeThroughGapColor>
				<StrikeThroughType type="object">StrokeStyle/$ID/Solid</StrikeThroughType>
				<SpanSplitColumnCount type="enumeration">All</SpanSplitColumnCount>
				<ParagraphShadingColor type="object">Color/Black</ParagraphShadingColor>
				<ParagraphBorderColor type="object">Color/Black</ParagraphBorderColor>
				<ParagraphBorderGapColor type="object">Swatch/None</ParagraphBorderGapColor>
				<ParagraphBorderType type="object">StrokeStyle/$ID/Solid</ParagraphBorderType>
				<Mojikumi type="enumeration">Nothing</Mojikumi>
				<KinsokuSet type="enumeration">Nothing</KinsokuSet>
				<RubyFont type="string">$ID/</RubyFont>
				<RubyFontStyle type="enumeration">Nothing</RubyFontStyle>
				<RubyFill type="string">Text Color</RubyFill>
				<RubyStroke type="string">Text Color</RubyStroke>
				<KentenFont type="string">$ID/</KentenFont>
				<KentenFontStyle type="enumeration">Nothing</KentenFontStyle>
				<KentenFillColor type="string">Text Color</KentenFillColor>
				<KentenStrokeColor type="string">Text Color</KentenStrokeColor>
				<BulletChar BulletCharacterType="UnicodeOnly" BulletCharacterValue="8226" />
				<NumberingFormat type="string">1, 2, 3, 4...</NumberingFormat>
				<BulletsFont type="string">$ID/</BulletsFont>
				<BulletsFontStyle type="enumeration">Nothing</BulletsFontStyle>
				<AppliedNumberingList type="object">NumberingList/$ID/[Default]</AppliedNumberingList>
				<NumberingRestartPolicies RestartPolicy="AnyPreviousLevel" LowerLevel="0" UpperLevel="0" />
				<BulletsCharacterStyle type="object">CharacterStyle/$ID/[No character style]</BulletsCharacterStyle>
				<NumberingCharacterStyle type="object">CharacterStyle/$ID/[No character style]</NumberingCharacterStyle>
				<SameParaStyleSpacing type="enumeration">SetIgnore</SameParaStyleSpacing>
			</Properties>
		</ParagraphStyle>
	</RootParagraphStyleGroup>
	<RootObjectStyleGroup Self="u99">
		<ObjectStyle Self="ObjectStyle/$ID/[Normal Graphics Frame]" EnableTransformAttributes="false" TopLeftCornerOption="None" TopRightCornerOption="None" BottomLeftCornerOption="None" BottomRightCornerOption="None" TopLeftCornerRadius="12" TopRightCornerRadius="12" BottomLeftCornerRadius="12" BottomRightCornerRadius="12" EmitCss="true" IncludeClass="true" EnableTextFrameAutoSizingOptions="false" ExtendedKeyboardShortcut="0 0 0" EnableExportTagging="false" EnableObjectExportAltTextOptions="false" EnableObjectExportTaggedPdfOptions="false" EnableObjectExportEpubOptions="false" Name="$ID/[Normal Graphics Frame]" AppliedParagraphStyle="ParagraphStyle/$ID/[No paragraph style]" ApplyNextParagraphStyle="false" EnableFill="true" EnableStroke="true" EnableParagraphStyle="false" EnableTextFrameGeneralOptions="false" EnableTextFrameBaselineOptions="false" EnableStoryOptions="false" EnableTextWrapAndOthers="false" EnableAnchoredObjectOptions="false" CornerRadius="12" FillColor="Swatch/None" FillTint="-1" StrokeWeight="1" MiterLimit="4" EndCap="ButtEndCap" EndJoin="MiterEndJoin" StrokeType="StrokeStyle/$ID/Solid" LeftLineEnd="None" RightLineEnd="None" StrokeColor="Color/Black" StrokeTint="-1" OverprintStroke="false" GapColor="Swatch/None" GapTint="-1" StrokeAlignment="CenterAlignment" Nonprinting="false" GradientFillAngle="0" GradientStrokeAngle="0" AppliedNamedGrid="n" KeyboardShortcut="0 0" EnableFrameFittingOptions="false" CornerOption="None" EnableStrokeAndCornerOptions="true" ArrowHeadAlignment="InsidePath" LeftArrowHeadScale="100" RightArrowHeadScale="100" EnableTextFrameFootnoteOptions="false">
			<Properties>
				<BasedOn type="string">$ID/[None]</BasedOn>
			</Properties>
			<TransformAttributeOption TransformAttrLeftReference="PageEdgeReference" TransformAttrTopReference="PageEdgeReference" TransformAttrRefAnchorPoint="TopLeftAnchor" />
			<ObjectExportOption AltTextSourceType="SourceXMLStructure" ActualTextSourceType="SourceXMLStructure" CustomAltText="$ID/" CustomActualText="$ID/" ApplyTagType="TagFromStructure" ImageConversionType="JPEG" ImageExportResolution="Ppi300" GIFOptionsPalette="AdaptivePalette" GIFOptionsInterlaced="true" JPEGOptionsQuality="High" JPEGOptionsFormat="BaselineEncoding" ImageAlignment="AlignLeft" ImageSpaceBefore="0" ImageSpaceAfter="0" UseImagePageBreak="false" ImagePageBreak="PageBreakBefore" CustomImageAlignment="false" SpaceUnit="CssPixel" CustomLayout="false" CustomLayoutType="AlignmentAndSpacing" EpubType="$ID/" SizeType="DefaultSize" CustomSize="$ID/" PreserveAppearanceFromLayout="PreserveAppearanceDefault">
				<Properties>
					<AltMetadataProperty NamespacePrefix="$ID/" PropertyPath="$ID/" />
					<ActualMetadataProperty NamespacePrefix="$ID/" PropertyPath="$ID/" />
				</Properties>
			</ObjectExportOption>
			<TextFramePreference FootnotesEnableOverrides="false" FootnotesSpanAcrossColumns="false" FootnotesMinimumSpacing="12" FootnotesSpaceBetween="6" TextColumnCount="1" TextColumnGutter="12" TextColumnFixedWidth="144" UseFixedColumnWidth="false" FirstBaselineOffset="AscentOffset" MinimumFirstBaselineOffset="0" VerticalJustification="TopAlign" VerticalThreshold="0" IgnoreWrap="false" VerticalBalanceColumns="false" UseFlexibleColumnWidth="false" TextColumnMaxWidth="0" AutoSizingType="Off" AutoSizingReferencePoint="CenterPoint" UseMinimumHeightForAutoSizing="false" MinimumHeightForAutoSizing="0" UseMinimumWidthForAutoSizing="false" MinimumWidthForAutoSizing="0" UseNoLineBreaksForAutoSizing="false" ColumnRuleOverride="false" ColumnRuleOffset="0" ColumnRuleTopInset="0" ColumnRuleInsetChainOverride="true" ColumnRuleBottomInset="0" ColumnRuleStrokeWidth="1" ColumnRuleStrokeColor="Color/Black" ColumnRuleStrokeType="StrokeStyle/$ID/Solid" ColumnRuleStrokeTint="100" ColumnRuleOverprintOverride="false">
				<Properties>
					<InsetSpacing type="list">
						<ListItem type="unit">0</ListItem>
						<ListItem type="unit">0</ListItem>
						<ListItem type="unit">0</ListItem>
						<ListItem type="unit">0</ListItem>
					</InsetSpacing>
				</Properties>
			</TextFramePreference>
			<BaselineFrameGridOption UseCustomBaselineFrameGrid="false" StartingOffsetForBaselineFrameGrid="0" BaselineFrameGridRelativeOption="TopOfInset" BaselineFrameGridIncrement="12">
				<Properties>
					<BaselineFrameGridColor type="enumeration">LightBlue</BaselineFrameGridColor>
				</Properties>
			</BaselineFrameGridOption>
			<AnchoredObjectSetting AnchoredPosition="InlinePosition" SpineRelative="false" LockPosition="false" PinPosition="true" AnchorPoint="BottomRightAnchor" HorizontalAlignment="LeftAlign" HorizontalReferencePoint="TextFrame" VerticalAlignment="BottomAlign" VerticalReferencePoint="LineBaseline" AnchorXoffset="0" AnchorYoffset="0" AnchorSpaceAbove="0" />
			<TextWrapPreference Inverse="false" ApplyToMasterPageOnly="false" TextWrapSide="BothSides" TextWrapMode="None">
				<Properties>
					<TextWrapOffset Top="0" Left="0" Bottom="0" Right="0" />
				</Properties>
				<ContourOption ContourType="SameAsClipping" IncludeInsideEdges="false" ContourPathName="$ID/" />
			</TextWrapPreference>
			<StoryPreference OpticalMarginAlignment="false" OpticalMarginSize="12" FrameType="Unknown" StoryOrientation="Unknown" StoryDirection="UnknownDirection" />
			<FrameFittingOption AutoFit="false" LeftCrop="0" TopCrop="0" RightCrop="0" BottomCrop="0" FittingOnEmptyFrame="None" FittingAlignment="CenterAnchor" />
			<ObjectStyleObjectEffectsCategorySettings EnableTransparency="true" EnableDropShadow="true" EnableFeather="true" EnableInnerShadow="true" EnableOuterGlow="true" EnableInnerGlow="true" EnableBevelEmboss="true" EnableSatin="true" EnableDirectionalFeather="true" EnableGradientFeather="true" />
			<ObjectStyleStrokeEffectsCategorySettings EnableTransparency="true" EnableDropShadow="true" EnableFeather="true" EnableInnerShadow="true" EnableOuterGlow="true" EnableInnerGlow="true" EnableBevelEmboss="true" EnableSatin="true" EnableDirectionalFeather="true" EnableGradientFeather="true" />
			<ObjectStyleFillEffectsCategorySettings EnableTransparency="true" EnableDropShadow="true" EnableFeather="true" EnableInnerShadow="true" EnableOuterGlow="true" EnableInnerGlow="true" EnableBevelEmboss="true" EnableSatin="true" EnableDirectionalFeather="true" EnableGradientFeather="true" />
			<ObjectStyleContentEffectsCategorySettings EnableTransparency="true" EnableDropShadow="true" EnableFeather="true" EnableInnerShadow="true" EnableOuterGlow="true" EnableInnerGlow="true" EnableBevelEmboss="true" EnableSatin="true" EnableDirectionalFeather="true" EnableGradientFeather="true" />
			<TextFrameFootnoteOptionsObject EnableOverrides="false" SpanFootnotesAcross="false" MinimumSpacingOption="12" SpaceBetweenFootnotes="6" />
		</ObjectStyle>
	</RootObjectStyleGroup>
	<TinDocumentDataObject>
		<Properties>
			<GaijiRefMaps><![CDATA[/////wAAAAAAAAAA]]></GaijiRefMaps>
		</Properties>
	</TinDocumentDataObject>
	<TransparencyDefaultContainerObject>
		<TransparencySetting>
			<BlendingSetting BlendMode="Normal" Opacity="100" KnockoutGroup="false" IsolateBlending="false" />
			<DropShadowSetting Mode="None" BlendMode="Multiply" Opacity="75" XOffset="7" YOffset="7" Size="5" EffectColor="n" Noise="0" Spread="0" UseGlobalLight="false" KnockedOut="true" HonorOtherEffects="false" />
			<FeatherSetting Mode="None" Width="9" CornerType="Diffusion" Noise="0" ChokeAmount="0" />
			<InnerShadowSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="75" Angle="120" Distance="7" UseGlobalLight="false" ChokeAmount="0" Size="7" Noise="0" />
			<OuterGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" />
			<InnerGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" Source="EdgeSourced" />
			<BevelAndEmbossSetting Applied="false" Style="InnerBevel" Technique="SmoothContour" Depth="100" Direction="Up" Size="7" Soften="0" Angle="120" Altitude="30" UseGlobalLight="false" HighlightColor="n" HighlightBlendMode="Screen" HighlightOpacity="75" ShadowColor="n" ShadowBlendMode="Multiply" ShadowOpacity="75" />
			<SatinSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="50" Angle="120" Distance="7" Size="7" InvertEffect="false" />
			<DirectionalFeatherSetting Applied="false" LeftWidth="0" RightWidth="0" TopWidth="0" BottomWidth="0" ChokeAmount="0" Angle="0" FollowShapeMode="LeadingEdge" Noise="0" />
			<GradientFeatherSetting Applied="false" Type="Linear" Angle="0" Length="0" GradientStart="0 0" HiliteAngle="0" HiliteLength="0" />
		</TransparencySetting>
		<StrokeTransparencySetting>
			<BlendingSetting BlendMode="Normal" Opacity="100" KnockoutGroup="false" IsolateBlending="false" />
			<DropShadowSetting Mode="None" BlendMode="Multiply" Opacity="75" XOffset="7" YOffset="7" Size="5" EffectColor="n" Noise="0" Spread="0" UseGlobalLight="false" KnockedOut="true" HonorOtherEffects="false" />
			<FeatherSetting Mode="None" Width="9" CornerType="Diffusion" Noise="0" ChokeAmount="0" />
			<InnerShadowSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="75" Angle="120" Distance="7" UseGlobalLight="false" ChokeAmount="0" Size="7" Noise="0" />
			<OuterGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" />
			<InnerGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" Source="EdgeSourced" />
			<BevelAndEmbossSetting Applied="false" Style="InnerBevel" Technique="SmoothContour" Depth="100" Direction="Up" Size="7" Soften="0" Angle="120" Altitude="30" UseGlobalLight="false" HighlightColor="n" HighlightBlendMode="Screen" HighlightOpacity="75" ShadowColor="n" ShadowBlendMode="Multiply" ShadowOpacity="75" />
			<SatinSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="50" Angle="120" Distance="7" Size="7" InvertEffect="false" />
			<DirectionalFeatherSetting Applied="false" LeftWidth="0" RightWidth="0" TopWidth="0" BottomWidth="0" ChokeAmount="0" Angle="0" FollowShapeMode="LeadingEdge" Noise="0" />
			<GradientFeatherSetting Applied="false" Type="Linear" Angle="0" Length="0" GradientStart="0 0" HiliteAngle="0" HiliteLength="0" />
		</StrokeTransparencySetting>
		<FillTransparencySetting>
			<BlendingSetting BlendMode="Normal" Opacity="100" KnockoutGroup="false" IsolateBlending="false" />
			<DropShadowSetting Mode="None" BlendMode="Multiply" Opacity="75" XOffset="7" YOffset="7" Size="5" EffectColor="n" Noise="0" Spread="0" UseGlobalLight="false" KnockedOut="true" HonorOtherEffects="false" />
			<FeatherSetting Mode="None" Width="9" CornerType="Diffusion" Noise="0" ChokeAmount="0" />
			<InnerShadowSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="75" Angle="120" Distance="7" UseGlobalLight="false" ChokeAmount="0" Size="7" Noise="0" />
			<OuterGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" />
			<InnerGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" Source="EdgeSourced" />
			<BevelAndEmbossSetting Applied="false" Style="InnerBevel" Technique="SmoothContour" Depth="100" Direction="Up" Size="7" Soften="0" Angle="120" Altitude="30" UseGlobalLight="false" HighlightColor="n" HighlightBlendMode="Screen" HighlightOpacity="75" ShadowColor="n" ShadowBlendMode="Multiply" ShadowOpacity="75" />
			<SatinSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="50" Angle="120" Distance="7" Size="7" InvertEffect="false" />
			<DirectionalFeatherSetting Applied="false" LeftWidth="0" RightWidth="0" TopWidth="0" BottomWidth="0" ChokeAmount="0" Angle="0" FollowShapeMode="LeadingEdge" Noise="0" />
			<GradientFeatherSetting Applied="false" Type="Linear" Angle="0" Length="0" GradientStart="0 0" HiliteAngle="0" HiliteLength="0" />
		</FillTransparencySetting>
		<ContentTransparencySetting>
			<BlendingSetting BlendMode="Normal" Opacity="100" KnockoutGroup="false" IsolateBlending="false" />
			<DropShadowSetting Mode="None" BlendMode="Multiply" Opacity="75" XOffset="7" YOffset="7" Size="5" EffectColor="n" Noise="0" Spread="0" UseGlobalLight="false" KnockedOut="true" HonorOtherEffects="false" />
			<FeatherSetting Mode="None" Width="9" CornerType="Diffusion" Noise="0" ChokeAmount="0" />
			<InnerShadowSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="75" Angle="120" Distance="7" UseGlobalLight="false" ChokeAmount="0" Size="7" Noise="0" />
			<OuterGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" />
			<InnerGlowSetting Applied="false" BlendMode="Screen" Opacity="75" Noise="0" EffectColor="n" Technique="Softer" Spread="0" Size="7" Source="EdgeSourced" />
			<BevelAndEmbossSetting Applied="false" Style="InnerBevel" Technique="SmoothContour" Depth="100" Direction="Up" Size="7" Soften="0" Angle="120" Altitude="30" UseGlobalLight="false" HighlightColor="n" HighlightBlendMode="Screen" HighlightOpacity="75" ShadowColor="n" ShadowBlendMode="Multiply" ShadowOpacity="75" />
			<SatinSetting Applied="false" EffectColor="n" BlendMode="Multiply" Opacity="50" Angle="120" Distance="7" Size="7" InvertEffect="false" />
			<DirectionalFeatherSetting Applied="false" LeftWidth="0" RightWidth="0" TopWidth="0" BottomWidth="0" ChokeAmount="0" Angle="0" FollowShapeMode="LeadingEdge" Noise="0" />
			<GradientFeatherSetting Applied="false" Type="Linear" Angle="0" Length="0" GradientStart="0 0" HiliteAngle="0" HiliteLength="0" />
		</ContentTransparencySetting>
	</TransparencyDefaultContainerObject>
	<Layer Self="ucb" Name="Layer 1" Visible="true" Locked="false" IgnoreWrap="false" ShowGuides="true" LockGuides="false" UI="true" Expendable="true" Printable="true">
		<Properties>
			<LayerColor type="enumeration">LightBlue</LayerColor>
		</Properties>
	</Layer>
	<Spread Self="uce">
		<Rectangle Self="ue3" ContentType="Unassigned" StoryTitle="$ID/" OverriddenPageItemProps="" Visible="true" Name="$ID/" HorizontalLayoutConstraints="FlexibleDimension FixedDimension FlexibleDimension" VerticalLayoutConstraints="FlexibleDimension FixedDimension FlexibleDimension" FillColor="Color/Black" StrokeWeight="0" StrokeColor="Swatch/None" GradientFillStart="0 0" GradientFillLength="0" GradientFillAngle="0" GradientStrokeStart="0 0" GradientStrokeLength="0" GradientStrokeAngle="0" ItemLayer="ucb" Locked="false" LocalDisplaySetting="Default" GradientFillHiliteLength="0" GradientFillHiliteAngle="0" GradientStrokeHiliteLength="0" GradientStrokeHiliteAngle="0" AppliedObjectStyle="ObjectStyle/$ID/[Normal Graphics Frame]" ItemTransform="1 0 0 1 0 0" ParentInterfaceChangeCount="" TargetInterfaceChangeCount="" LastUpdatedInterfaceChangeCount="">
			<Properties>
				<PathGeometry>
					<GeometryPathType PathOpen="false">
						<PathPointArray>
							<PathPointType Anchor="36.5 -359.5" LeftDirection="36.5 -359.5" RightDirection="36.5 -359.5" />
							<PathPointType Anchor="36.5 -186.26" LeftDirection="36.5 -186.26" RightDirection="36.5 -186.26" />
							<PathPointType Anchor="251.49999999999997 -186.26" LeftDirection="251.49999999999997 -186.26" RightDirection="251.49999999999997 -186.26" />
							<PathPointType Anchor="251.49999999999997 -359.5" LeftDirection="251.49999999999997 -359.5" RightDirection="251.49999999999997 -359.5" />
						</PathPointArray>
					</GeometryPathType>
				</PathGeometry>
			</Properties>
			<FrameFittingOption AutoFit="false" LeftCrop="0" TopCrop="0" RightCrop="0" BottomCrop="0" FittingOnEmptyFrame="None" FittingAlignment="CenterAnchor" />
			<ObjectExportOption AltTextSourceType="SourceXMLStructure" ActualTextSourceType="SourceXMLStructure" CustomAltText="$ID/" CustomActualText="$ID/" ApplyTagType="TagFromStructure" ImageConversionType="JPEG" ImageExportResolution="Ppi300" GIFOptionsPalette="AdaptivePalette" GIFOptionsInterlaced="true" JPEGOptionsQuality="High" JPEGOptionsFormat="BaselineEncoding" ImageAlignment="AlignLeft" ImageSpaceBefore="0" ImageSpaceAfter="0" UseImagePageBreak="false" ImagePageBreak="PageBreakBefore" CustomImageAlignment="false" SpaceUnit="CssPixel" CustomLayout="false" CustomLayoutType="AlignmentAndSpacing" EpubType="$ID/" SizeType="DefaultSize" CustomSize="$ID/" PreserveAppearanceFromLayout="PreserveAppearanceDefault">
				<Properties>
					<AltMetadataProperty NamespacePrefix="$ID/" PropertyPath="$ID/" />
					<ActualMetadataProperty NamespacePrefix="$ID/" PropertyPath="$ID/" />
				</Properties>
			</ObjectExportOption>
			<TextWrapPreference Inverse="false" ApplyToMasterPageOnly="false" TextWrapSide="BothSides" TextWrapMode="None">
				<Properties>
					<TextWrapOffset Top="0" Left="0" Bottom="0" Right="0" />
				</Properties>
			</TextWrapPreference>
			<InCopyExportOption IncludeGraphicProxies="true" IncludeAllResources="false" />
		</Rectangle>
	</Spread>
	<ColorGroup Self="ColorGroup/[Root Color Group]" Name="[Root Color Group]" IsRootColorGroup="true">
		<ColorGroupSwatch Self="u18ColorGroupSwatch3" SwatchItemRef="Color/Black" />
		<ColorGroupSwatch Self="u18ColorGroupSwatch0" SwatchItemRef="Swatch/None" />
	</ColorGroup>
	<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c148 79.164036, 2019/08/13-01:06:57        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
         <dc:format>application/x-indesign</dc:format>
         <xmp:CreatorTool>Adobe InDesign 15.0 (Macintosh)</xmp:CreatorTool>
         <xmp:CreateDate>2024-03-17T11:53:55-04:00</xmp:CreateDate>
         <xmp:MetadataDate>2024-03-17T11:53:55-04:00</xmp:MetadataDate>
         <xmp:ModifyDate>2024-03-17T11:53:55-04:00</xmp:ModifyDate>
         <xmp:Thumbnails>
            <rdf:Alt>
               <rdf:li rdf:parseType="Resource">
                  <xmpGImg:format>JPEG</xmpGImg:format>
                  <xmpGImg:width>512</xmpGImg:width>
                  <xmpGImg:height>512</xmpGImg:height>
                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4AE0Fkb2JlAGQAAAAAAQUAAklE/9sAhAAKBwcHBwcKBwcKDgkJCQ4RDAsLDBEU&#xA;EBAQEBAUEQ8RERERDxERFxoaGhcRHyEhISEfKy0tLSsyMjIyMjIyMjIyAQsJCQ4MDh8XFx8rIx0j&#xA;KzIrKysrMjIyMjIyMjIyMjIyMjIyMjI+Pj4+PjJAQEBAQEBAQEBAQEBAQEBAQEBAQED/wAARCACv&#xA;ANgDAREAAhEBAxEB/8QBogAAAAcBAQEBAQAAAAAAAAAABAUDAgYBAAcICQoLAQACAgMBAQEBAQAA&#xA;AAAAAAABAAIDBAUGBwgJCgsQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFBUQYTYSJxgRQykaEH&#xA;FbFCI8FS0eEzFmLwJHKC8SVDNFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkKGBmElEVGpLRW01Uo&#xA;GvLj88TU5PRldYWVpbXF1eX1ZnaGlqa2xtbm9jdHV2d3h5ent8fX5/c4SFhoeIiYqLjI2Oj4KTlJ&#xA;WWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+hEAAgIBAgMFBQQFBgQIAwNtAQACEQMEIRIxQQVRE2Ei&#xA;BnGBkTKhsfAUwdHhI0IVUmJy8TMkNEOCFpJTJaJjssIHc9I14kSDF1STCAkKGBkmNkUaJ2R0VTfy&#xA;o7PDKCnT4/OElKS0xNTk9GV1hZWltcXV5fVGVmZ2hpamtsbW5vZHV2d3h5ent8fX5/c4SFhoeIiY&#xA;qLjI2Oj4OUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6/9oADAMBAAIRAxEAPwDmes6zq8Wr38UV&#xA;/coiXMyqqzOAoDsAAA3TMvUajKMsgJHmerj4cOM4xsOSD/Tmt/8AVxuv+R8n/NWVfms384/MtngY&#xA;/wCaPk79Oa3/ANXG6/5Hyf8ANWP5rN/OPzK+Bj/mj5O/Tmt/9XG6/wCR8n/NWP5rN/OPzK+Bj/mj&#xA;5O/Tmt/9XG6/5Hyf81Y/ms384/Mr4GP+aPk79Oa3/wBXG6/5Hyf81Y/ms384/Mr4GP8Amj5O/Tmt&#xA;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&#xA;hzH879TDLORgRwnl5frf/9k=</xmpGImg:image>
               </rdf:li>
            </rdf:Alt>
         </xmp:Thumbnails>
         <xmpMM:InstanceID>xmp.iid:29da960a-83d4-4184-9d21-8250e111a778</xmpMM:InstanceID>
         <xmpMM:DocumentID>xmp.did:29da960a-83d4-4184-9d21-8250e111a778</xmpMM:DocumentID>
         <xmpMM:OriginalDocumentID>xmp.did:29da960a-83d4-4184-9d21-8250e111a778</xmpMM:OriginalDocumentID>
         <xmpMM:History>
            <rdf:Seq>
               <rdf:li rdf:parseType="Resource">
                  <stEvt:action>created</stEvt:action>
                  <stEvt:instanceID>xmp.iid:29da960a-83d4-4184-9d21-8250e111a778</stEvt:instanceID>
                  <stEvt:when>2024-03-17T11:53:55-04:00</stEvt:when>
                  <stEvt:softwareAgent>Adobe InDesign 15.0 (Macintosh)</stEvt:softwareAgent>
               </rdf:li>
            </rdf:Seq>
         </xmpMM:History>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>
</Document>
I think the design goal of this format is to rebuild a page layout for PDF / print AND the InDesign/App file that created it (so it includes things like the Color Swatches in the color palette) so there's a LOT of information there beyond just the page objects ( which was just a black box here).

But yeah it was really not necessary for it to include things like that fact that the 'drop shadow' was set to 0 (none).

I would only including properties of objects that were actually set to something other than default/empty, so for example to describe a text fld that did not have any script attached to it, I would not include an empty <script></script> tag, likewise If a button had a foreColor set to none/empty I would't include a <foreGround></foreGround> tag, and so it would be a lot less XML to describe a stack's layout.
User avatar
OpenXTalkPaul
Posts: 1574
Joined: Sat Sep 11, 2021 4:19 pm
Contact:

Re: xTalk Style Stack

Post by OpenXTalkPaul »

Here's a small GUI layout in NeXT/Apple Interface Builder's xml markup (a .xib file):

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19455" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_1" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment version="4864" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19454"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view multipleTouchEnabled="YES" contentMode="scaleToFill" id="iN0-l3-epB">
            <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <point key="canvasLocation" x="-229" y="38"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
Which is a bit smaller, and more concise, but the tagged <object> still includes tags for things that were left with their default properties setting.

Seen here, a 'view' (NSview object) is a lot like the xTalk equivalent of 'card', while an stack is much like interface builder's equivalent of a window (NSWindow object). A card can actually be a different size than the stack that contains it, hence it allows for positioning objects 'on' a card with negative coordinates for example.

I'm after a mark up that's more like HTML and more minimalist, something like this:

<stack width=1024 height=768>
<card>
<button topLeft=10,10 width=48 height=24>
</button>
</card>
</stack>

Would be enough to build a 1024x768 stack with one card and one 48px wide x 24px high button with topLeft start point at 10,10 and all other properties using default settings.
User avatar
tperry2x
Posts: 1538
Joined: Tue Dec 21, 2021 9:10 pm
Location: Britain (Previously known as Great Britain)
Contact:

Re: xTalk Style Stack

Post by tperry2x »

So are you thinking of changing the stack format?
User avatar
richmond62
Posts: 2776
Joined: Sun Sep 12, 2021 11:03 am
Location: Bulgaria
Contact:

Re: xTalk Style Stack

Post by richmond62 »

I object to that 100%.

I realise there is a strong feeling round these parts towards LiveCode (the company), and that is not without justification.

HOWEVER; there should NOT be a strong feeling towards most users of LiveCode (the software package), and anything that blocks interoperability also lessens the chance of erstwhile LC users from taking up OXT.

Of course, if you can set things up in such a way that OXT can open LC files, but CANNOT save them as LC files, that might be worth considering.

HOWEVER; in my particular situation re my Devawriter program, and my ongoing development of both my Grendel and Pismo programs, I should like the option of being able to open stacks I have developed in OXT in LC should I choose to pay for an LC licence to:

1. Password protect standalones.

2. Develop for ARM Mac machines.

I am sure that any prevention of interoperability will send a fairly negative signal, and not to 'Kev' (who I feel really does deserve a fair few negative signals), but to HC/MC/RunRev/LCC (err, and SuperCard users) who might want to either experiment with OXT, or adopt it full-time.
https://richmondmathewson.owlstown.net/
User avatar
richmond62
Posts: 2776
Joined: Sun Sep 12, 2021 11:03 am
Location: Bulgaria
Contact:

Re: xTalk Style Stack

Post by richmond62 »

Perhaps I should also point out that 'someone' was making fairly trenchant remarks about Apple's "greasy pole", in that one can no longer run 32-bit Mac software on recent versions of MacOS (nor, for that matter PPC code).

To "lock up" OXT in such a way that it could Neither open LC/RunRev files, nor save files in such a way that LC could not open them would be fairly similar to Apple's greasy pole.
https://richmondmathewson.owlstown.net/
User avatar
richmond62
Posts: 2776
Joined: Sun Sep 12, 2021 11:03 am
Location: Bulgaria
Contact:

Re: xTalk Style Stack

Post by richmond62 »

I wonder how many people would use either LibreOffice or Apache OpenOffice if they were no interoperable with Microsoft Office (whatever negative thoughts [tons in my case] you may have about Microsoft: they got 'there' first, and .doc and .docx are, unfortunately, 'standards').
https://richmondmathewson.owlstown.net/
User avatar
tperry2x
Posts: 1538
Joined: Tue Dec 21, 2021 9:10 pm
Location: Britain (Previously known as Great Britain)
Contact:

Re: xTalk Style Stack

Post by tperry2x »

I don't know if Paul's thoughts were to be able to still be able to open livecode stacks. I assume he was thinking of keeping that the way it was.

I was thinking of making my variant work a bit like the way saving legacy stacks work. So you can still open and save all livecode stacks (just as you can do now), but the default format, on saving an untitled stack for the first time, would perhaps change to some other undecided format.

If anything, it's adding more options, not taking any away.
There's another reason I was thinking of doing this. My variant will probably (eventually) contain additional commands and functions that you won't be able to use in the normal version of livecode (additions to the language). I need some way to stop livecode users opening incompatible stacks, and saving as a new format would do that.

However, there's lots of ways to achieve something like that. Perhaps if using keywords and things in script, revised 'vidPlayer' objects for example, then upon trying to save in livecode format, a message could be displayed saying "Your stack uses features and commands that are not available in the livecode stack format. If you continue to save in this format, your stack will not function properly." (Or something like that)
User avatar
richmond62
Posts: 2776
Joined: Sun Sep 12, 2021 11:03 am
Location: Bulgaria
Contact:

Re: xTalk Style Stack

Post by richmond62 »

Your ideas make a lot more sense than complete 'lock down' non-interoperability. This is bit like the GIMP-Photoshop duopoly.
https://richmondmathewson.owlstown.net/
xAction
Posts: 285
Joined: Thu Sep 16, 2021 1:40 pm
Contact:

Re: xTalk Style Stack

Post by xAction »

I think there's too few LC users, and there will be even fewer as time moves forward especially on niche things like linux, to worry about them mismanaging stack files from various environments.

We already have situations where the engine craps in your hand if you open up a stack you used a library like Animation Engine to make and it isn't available. If you open up a stack that used an extension like that iGame3D thing it just freaks out and doesn't even tell you what's missing, and even if you have it where it was meant to go, the engine doesn't tell you "We changed where things go and how you tell the engine where it is, noob."

There are so many demos that are just wholly broken because this or that thing you can't even identify is missing. Clearly it worked once, but it don't work no more.

If you are going to build new commands then you should build them as an extension of the current system , having to recompile the entire IDE and engine just to change how a command works is madness, as you can see with the struggle to find pre-built binaries for things.

Anyway, kind of back on topic, before Richmond has another panic attack.

We are discussing simply a means to break down the whole stack/card structure to a simple text file format that could then be parsed and rebuilt without a dependency on the stack binary file and all the software it takes to read/modify it.

You want to make a tutorial or just a layout example of your stack on a web page? whammo-zammo there's the HTML & CSS of the stack, just javascript the parts that 'do something' for the demonstration, without having the user download 25 megabytes of emscripten engine...(from apparently LC's slowest servers in the world?)

You want to put your stacks on github or bitbucket without every single detail being 100% occluded to all 7 billion people and all the AIs on earth? Well...good old ugly XML...or QML...or Whatver-the-hell we figure out is going to be a solution.

You can embed SVG structures, javascript and references to javascript files in SVG files, that's probably the road to take.
Just call it xSVG.

Because who doesn't want scripts inside their image files, what could possibly go wrong?!
User avatar
OpenXTalkPaul
Posts: 1574
Joined: Sat Sep 11, 2021 4:19 pm
Contact:

Re: xTalk Style Stack

Post by OpenXTalkPaul »

My motivation for wanting a UI markup doesn't have much to do with the binary stack file format, which isn't really even documented as far as I can find anywhere (we would have to derive the structure from the source code, the bits that writes stacks to disk). I've never had any intention of dropping the binary stack format.

In fact I'm in favor of expanding on the stack format with new stack properties and card level properties when needed. For example I added already 'darkMode' boolean to stack properties.

I've wanted something iike a UI markup since 'script-only' stacks were introduced. I imagine it would be used in a stack / script object template system (like Qt's QML is), not just for complete stacks but for objects such as Buttons, Fields, Image Controls, etc., and perhaps it could be also be useful as an intermediate format in some sort of xTalk interchange format, used in a conversion to Web HTML (exactly like Dan's HyperSim's file format is a conversion from HC stack format to JSON/PNG and then to HTML), or perhaps useful in exchanging data with other UI mark-up like Qt's QML.
Here is an example markup for a plain empty button in QML (it is JSON based):

Code: Select all

Button {
    text: "Button"
}
https://doc.qt.io/qt-5/qml-qtquick-controls-button.html
User avatar
richmond62
Posts: 2776
Joined: Sun Sep 12, 2021 11:03 am
Location: Bulgaria
Contact:

Re: xTalk Style Stack

Post by richmond62 »

before Richmond has another panic attack
LOL!

Not really: just took a look at how other Open Source apps coped with interoperability with Commercial apps.
https://richmondmathewson.owlstown.net/
User avatar
tperry2x
Posts: 1538
Joined: Tue Dec 21, 2021 9:10 pm
Location: Britain (Previously known as Great Britain)
Contact:

Re: xTalk Style Stack

Post by tperry2x »

I've hit the same problem, but in reverse, in my engine.
Opening Livecode stacks that might use something that I've not added to my engine, previously just caused a spontaneous quit.

At least I've now put in an error catcher, so it dumps the error to "errors.log" now.
So, that should also mean if I open a stack that requires the animation Engine, (and obviously my build doesn't have it)....

Code: Select all

[malloc addr._parser.cpp:242:20: parse error: 'tIDE/engine-main.hpp' file not found. Operand: "animationEngine"]
(Still a bit cryptic, so I could make this a lot more 'human readable'). Still, it shows what happens if I currently open a stack that relies on the Animation Engine.

(So I've already got the situation where I'm having to build support back in for the livecode stack format). - As rightly said, it's not really documented anywhere - so I'll try and piece some of that together into a readable version as it's all internal to the engine currently).

Worth clarifying: I wasn't building new commands into my version of the engine, directly hard-coded into the C++ source, just to be clear. I'm keen to externalise everything, so anyone will be able to get to it and modify things without having to fire up a compiler.
I'm adding any new commands as extensions.

(I'm testing these out in OXT Lite at the moment, just because my engine currently doesn't understand extensions - yet another thing I need to recreate and ensure are compatible)... :|
Screenshot_2024-03-13_19-43-50.png
Screenshot_2024-03-13_19-43-50.png (217.41 KiB) Viewed 328 times
So, yes - this is just me testing a revised SystemVersion command. You can see I call it OSVersion in the screenshot above.
I checked with Paul the other day, just in case I was missing something obvious, but it seems I have to run it as a bit of an ugly function?
I can't just use "get the OSVersion" as those neatly formatted commands are internal commands, and it seems only possible to keep them nice and succinct like that if they are part of the engine (hopefully someone will correct me on that). I'd be happy if that's not the case.

You'll also notice my copyright text in there - which I can add as it's all my own work and does not rely on the LCC source, and will be developed in my own engine (so they have no ownership of my code) - it'll just 'coincidentally' happen to work with OXT/OXT Lite too ;)
/*
* This code is intended to provide extra functions to OpenXTalk / OpenXTalk Lite.
* This should be considered free to use by anyone, however there is one stipulation / condition:
* This code should in no part be used in any LiveCode product, or fork bearing the LiveCode product name. This stipulation cannot be modified or altered, and this notice MUST go with this plugin unaltered.
*/

Why? Well, you'd be amazed (or maybe not) about the amount of work required to re-create everything we take for granted in the LCC engine at present. Even basic things like adding text formatting and colours into my engine took me a while to figure out, and ensure that it was compatible - I'm striving for maximum compatibility where possible of course between LCC stacks, so there's a lot of 'cruft' if you like that it has to support. I'll ultimately add this as a 'legacy-support' extension.

The benefit of that being of course, if someone wants to 'slim-down' a copy of my engine at any point (when it's ready in say, 2030!) they don't have to go through source code and strip out the legacy functions. They just remove the 'legacy-support' extension from a folder.

Okay, not 'cruft' - that's a bit of a bad description, as this is the xTalk language that we know (and ultimately what I'm trying to preserve I guess)... however, just how far do I go with that? Do I try and support things like revCopyFile (things beginning with rev), because this is frankly really old syntax and harks back to the days of Runtime Revolution.
I'm thinking I just set up an alias function, so when you call revCopyfile() it just passes to xTCopyfile() or something simple like that.

So, with all this work in mind (which in my opinion needs to be done if we are to ever break the shackles of LC), I'm not keen on them having any claim to any part of this as their own. Yes, I'm [slowly] reinventing the wheel - but the wheel needs it in my opinion.

In the following 7z file, you'll also find an "api.lcdoc" which is currently blank. I know this where my blurb goes for the syntax of any new commands, so that they get added to the dictionary I guess. But, again - I can't see this documented anywhere - so I hope someone can tell me what format this takes? Perhaps someone in the know can write a sample "api.lcdoc" file that describes my simplistic OSVersion command above?
Attachments
Untitled 1.oxtstack
(1.72 KiB) Downloaded 9 times
community.openxtalk.plugin.oxtlite 2.7z
(1.55 KiB) Downloaded 7 times
User avatar
richmond62
Posts: 2776
Joined: Sun Sep 12, 2021 11:03 am
Location: Bulgaria
Contact:

Re: xTalk Style Stack

Post by richmond62 »

If LiveCode (the company) 'lay claim' to anything it can only be LC 693, which is GPL, so I acnnot see how they can get tehir sweaty paws on any subsequent work insofar as it is also GPL.

Why does 'LC 963' now make me think of what the Americans refer to as "9/11"?
https://richmondmathewson.owlstown.net/
xAction
Posts: 285
Joined: Thu Sep 16, 2021 1:40 pm
Contact:

Re: xTalk Style Stack

Post by xAction »

Isn't this the documentation for the .lcdoc?

Oh it a folder full of stuff there, I guess you have to figure it out from example. Probably just make a stack based on that and you'll have your format.
User avatar
tperry2x
Posts: 1538
Joined: Tue Dec 21, 2021 9:10 pm
Location: Britain (Previously known as Great Britain)
Contact:

Re: xTalk Style Stack

Post by tperry2x »

That seems to be information about how to accept connections from incoming connection requests on port 80, for the socket function.

I get what you mean though - that I can use the example in those lcdoc files to create something describing my OSVersion function.

It doesn't seem to describe the way a stack is formatted, read in, and written back to disk though.
For that, I'm currently dissecting the existing community source regarding the stack format, learning from it, re-interpreting it, while also trying to describe and document each section of it. :lol:

As an aside:
It seems to load it all into temporary memory, so when you are working on a stack - it's directly editing the memory register, rather than a temp file somewhere. That's a bit risky, but comes back to another conversation about 'memory safe' languages, which this does not seem to be. This is why Photoshop stopped doing this and started using 'scratch disks' to store a temporary copy of the file being edited. (The problem with it being fully in memory, any part of the loaded stack can be referenced by another program if it knows what memory registers to look at). So, you can't really have any part of the stack truly protected unless all the code loaded into memory is being scrambled by some form of encryption.

All someone has to do to read a LC "Protected stack", is search the memory offsets for the beginning file header of the stack, and read from there. No protection.

So, if you had an app/program that was designed to look for these offsets, open in the background, * then happen to load your stack in LCC/OXT, it can be intercepted and a copy of the stack in it's full unprotected glory could in theory be reconstructed :roll:
* come to think of it, - it doesn't even have to be a separate program you can 'see' in task manager / activity monitor. Any code that was executing could 'listen' to those memory offset registers until it finds something of interest: A recursive function sent to a card, stack or hidden stack object would also suffice.

It can also work the other way too - you could have a malicious bit of code that was designed to substitute a block of known memory registry values with something else, thereby swapping out code in your stack for something you didn't write at all - and I mean anything potentially malicious, like a "get shell("format C:\")" on windows, or a "get shell("rm -R -f ~/")", and this gets committed to the stack when you hit save!

Not good. The xTalk version of 'Popping a Shell' with a memory offset hack.
Post Reply

Who is online

Users browsing this forum: No registered users and 24 guests