~jpgleeson/piaine

ref: 86dbf8b54573b67c074f77ad3bd6a20c67c7da17 piaine/Parser.cs -rw-r--r-- 4.5 KiB
86dbf8b5 — jpgleeson Merge remote-tracking branch 'sourcehut/master' 10 months ago
                                                                                
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
using System;
using System.Collections.Generic;
using System.Text;

namespace piaine
{
    public class Parser
    {
        List<Token> tokens;
        List<string> outputStrings;

        public Parser(List<Token> desTokens)
        {
            tokens = desTokens;
            outputStrings = new List<string>();
        }

        public void refreshTokens(List<Token> desTokens)
        {
            tokens = desTokens;
            outputStrings = new List<string>();
        }

        public List<string> writeVariablesInSource(string source, List<Variable> variables)
        {

            foreach (Token t in tokens)
            {
                if (t.type == TokenType.Unscoped)
                {
                    outputStrings.Add(t.literal.ToString());
                }
                else if (t.type == TokenType.Variable)
                {
                    foreach(Variable v in variables)
                    {
                        if (t.literal.ToString() == v.name)
                        {
                            outputStrings.Add(v.literal);
                            break;
                        }
                    }
                    //outputStrings.Add(t.literal.ToString());
                }
            }

            return outputStrings;
        }

        public List<string> writeVariablesInSource(string source, List<Post> posts)
        {
            outputStrings.Clear();

            foreach (Token t in tokens)
            {
                if (t.type == TokenType.Unscoped)
                {
                    outputStrings.Add(t.literal.ToString());
                }
                else if (t.type == TokenType.Variable)
                {
                    int counter = 0;

                    if (t.literal.ToString() == "post")
                    {
                        foreach (Post p in posts)
                        {
                            String outputLink = "<div>{0}  -  <a href='{1}'>{2}</a></div>";

                            outputLink = outputLink.Replace("{0}", p.date.ToShortDateString());
                            outputLink = outputLink.Replace("{1}", p.path);
                            outputLink = outputLink.Replace("{2}", p.name);

                            counter++;
                            outputStrings.Add(outputLink);
                        }
                    }
                    //outputStrings.Add(t.literal.ToString());
                }
            }

            return outputStrings;
        }

        public List<string> writeAtomFeed(string source, List<Post> posts)
        {
            outputStrings.Clear();

            foreach (Token t in tokens)
            {
                if (t.type == TokenType.Unscoped)
                {
                    outputStrings.Add(t.literal.ToString());
                }
                else if (t.type == TokenType.Variable)
                {
                    int counter = 0;

                    if (t.literal.ToString() == "date")
                    {
                        outputStrings.Add(DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ssZ"));
                    }

                    if (t.literal.ToString() == "post")
                    {
                        foreach (Post p in posts)
                        {
                            String outputLink = "<entry><title> {0} </title><link href = '{1}' /><id>{3}</id><updated>{2}</updated></entry> ";

                            outputLink = outputLink.Replace("{2}", p.date.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ssZ"));
                            outputLink = outputLink.Replace("{1}", p.path);
                            outputLink = outputLink.Replace("{0}", p.name);
                            outputLink = outputLink.Replace("{3}", p.name.Replace(' ', '_') + p.date.ToString().Replace('/', '_').Replace(':', '-').Replace(' ', '_'));

                            counter++;
                            outputStrings.Add(outputLink);
                        }
                    }
                    //outputStrings.Add(t.literal.ToString());
                }
            }

            return outputStrings;
        }


        /// <summary>
        /// Use this to change a variable from the token list to the string of the variable from the source file.
        /// </summary>
        /// <param name="tokenToWrite"></param>
        /// <returns></returns>
        public string writeVariable(Token tokenToWrite)
        {
            return tokenToWrite.literal.ToString();
        }
    }
}