...1-
...2|
...3|
...4|
...5|
...6|
...7|
...8|
...9|
..10|
..11|
..12|
..13|
..14|
..15|
..16|
..17|
..18|
..19|
..20-

..21
..22-
..23|
..24|
..25|
..26-

..27
..28
..29
..30
..31-
..32-
..33|
..34|
..35-

..36|
..37|
..38|-
..39||
..40||
..41||
..42||
..43||
..44||
..45||
..46||
..47||
..48||
..49|
..50||
..51||
..52||
..53||
..54||
..55||
..56||
..57||
..58||
..59||
..60||
..61||
..62||
..63||
..64||
..65||
..66||
..67||
..68||
..69||
..70||
..71||
..72||
..73||
..74||
..75||
..76||
..77||
..78||
..79||
..80||
..81||
..82||
..83||
..84||
..85|-

..86|
..87-
..88|
..89|
..90-

..91|
..92|
..93|-
..94||
..95||
..96||
..97||
..98||
..99||
.100||
.101||
.102||
.103||
.104||
.105||
.106||
.107||
.108||
.109||
.110||
.111||
.112||
.113||
.114||
.115|-

.116|
.117|-
.118||
.119||
.120||
.121||
.122||
.123||
.124||
.125||
.126||
.127||
.128||
.129||
.130||
.131||
.132||
.133||
.134||
.135||
.136||
.137||
.138||
.139||
.140||
.141||
.142||
.143||
.144||
.145||
.146||
.147||
.148||
.149||
.150||
.151||
.152|-

.153-

.154
.155
/* CharMY.CodeToHtml エントリポイント
 * 
 * COPYLEFT (C) CharMY 2012-2013 Yanagihara Masami
 * 
 * 
 * This program is free software: you can redistribute it and/or modify   *
 * it under the terms of the GNU General Public License as published by   *
 * the Free Software Foundation, either version 3 of the License, or      *
 * (at your option) any later version.                                    *
 *                                                                        *
 * This program is distributed in the hope that it will be useful,        *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
 * GNU General Public License for more details.                           *
 *                                                                        *
 * You should have received a copy of the GNU General Public License      *
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.  *
 * 
 * 
 */


using System;
using System.Linq;
using System.Windows.Forms;
using CharMY.IO;
using CharMY.Net;


namespace CharMY.CodeToHtml
{
    internal static class _CharMYCodeToHtml
    {
        /// <summary>
        /// 変換開始
        /// </summary>
        /// <param name="args">起動パス</param>

        [STAThread]
        private static void Main(string[] args)
        {
            Consoles.WriteInformation();

            string rtf = null;
            if (Clipboard.ContainsData(DataFormats.Rtf))
            {
                rtf = Clipboard.GetData(DataFormats.Rtfas string;
            }

            if (rtf != null)
            {
                //複数のバージョンの中で最も適合する設定を適用する.(CSS設定のみに反映)
                var to_html = new CodeToHtmlConverter("csharp",
                    VSEditorVersion.VS2012ExpressDesktop | VSEditorVersion.Black,
                    VSEditorVersion.VS2012ExpressDesktop | VSEditorVersion.White,
                    VSEditorVersion.VS2010ExpressCSharp
                )
                {
                    ShowCollapceLevel = !args.Contains("/noclp"),
                    CssFileName = "colors-of-csharp",
                    ScriptFileName = "collapse-script"
                };

                var file_name = DateTime.Now.ToString("yyyy-MM-dd--HH-mm-ss");
                var class_name = rtf
                    .ReplaceByRegexWithoutTags(@"\\[0-9a-z]+""")
                    .AllMatchOf(@"(?<partial>partial|) * (class|interface|struct|enum)  *(?<classname>\w+)")
                    .Select(name =>
                    {
                        var result = name.Groups["classname"].Value;
                        if (name.Groups["partial"].Length > 0)
                            result = "(" + result + "-" + file_name.Replace("-"""+ ")";

                        return result;
                    })
                    .ToSingleString("-");

                if (class_name.Length > 0)
                    file_name = class_name;

                var file = Files.DeskTop.GetRelativeFile("./output/html/" + file_name + ".html");
                var text = to_html.SaveHtmlFile(filertfuseCss!args.Contains("/nocss"));

#if !DEBUG
                Clipboard.SetText(text);
#endif
            }
        
}

        /// <summary>
        /// デフォルトの配列を作成
        /// Rの値を+1(0xFFは-1)したセッティングファイルからデフォルト設定のXMLを作成
        /// </summary>

        [STAThread]
        private static void Main0()
        {
            Consoles.ChangeOut(TextWriterOptions.CompoundConsoleExpandSsv);

            var io = Files.Kind("setting""vssettings");
            io.ResetLastAccess();
            var file = io.GetFile();
            var items = SettingToCssConverter
                .GetItems(file)
                .ToArray();

            for (int i = items.Length - 1 ; i >= 0 ; --i)
            {
                RemakeColor(ifalseitems);
                RemakeColor(itrueitems);
            }
            Console.WriteLine(items.ToStrings());

            Files.SerialXml<SettingToCssConverter.ColoringItem[]>()
                .Save(file.ChangeName((nameext=> name + "-array.xml"), items);

            Console.WriteLine("COMPLETE");
            Console.ReadLine();
        
}
        public static void RemakeColor(int ibool backgroundSettingToCssConverter.ColoringItem[] itemsint depth = 2)
        {
            var color = background ? items[i].Background : items[i].Foreground;
            if (color < 0)
                return;

            Assert.True(color > 0items[i].Name + " is invalid " + color.ToString("X6"));

            if (depth > 0)
            {
                var check = items
                    .Indexed()
                    .Skip(i + 1)
                    .Where(item => (background ? item.Element.Background : item.Element.Foreground== color);
                if (check.Count() >= 2)
                    check.Eval(item => RemakeColor(item.Indexbackgrounditemsdepth - 1));
            }

            var r = (color & 0xFF0000);
            if (r >= 0xFE0000)
            {
                r = 0xFF0000;
            }
            else
            {
                r = r - 0x010000;
            }
            color = (color & 0x00FFFF| r;
            if (background)
            {
                items[i].Background = color;
            }
            else
            {
                items[i].Foreground = color;
            }
        
}
    
}
}